 2-Jul-86 05:41:21-MDT,976;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 05:41:15-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a001719; 2 Jul 86 7:04 EDT
Received: from (NEUTAGE)NEUVM1.BITNET by WISCVM.ARPA on 07/02/86 at
  06:06:03 CDT
Date: Wed, 02 Jul 86 13:04:11 cet
To:  INFO-CPM@AMSAA.ARPA
From:  NEUTAGE%NEUVM1.BITNET@WISCVM.ARPA
Subject:

HI FOLKS.
Where do I find Mr. Nice Guy ?
I've seen the "advertice" of some of the PD software one can get
on the ARPA (DDN) side of the world.
I'm not able to log on the ARPANET direct, and because there is no
FTP between ARPANET and BITNET (it's a mail-only gateway) I can't get it
that way either.

My question is: Is there a friendly user who wants to help little old me
by sending some of the programs ? If sofileen please let me know.


Kind regards from Copenhagen.                    TAGE

Userid         NEUTAGE
node.id        NEUVM1.BITNET










 2-Jul-86 08:31:52-MDT,2236;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 08:31:14-MDT
Received: from csnet-relay.arpa by AMSAA.ARPA id a022306; 23 Jun 86 11:25 EDT
Received: from gmr.com by csnet-relay.csnet id aa17892; 23 Jun 86 11:21 EDT
Date:     Mon, 23 Jun 86 09:32 EST
From:     RLH <HAAR%RCSMPA%gmr.com@CSNET-RELAY.ARPA>
To:       info-cpm-request@AMSAA.ARPA
Subject:  RE: HD64180 info req.
Resent-Date:  Wed, 2 Jul 86 9:29:30 EDT
Resent-From:  cpmlist@AMSAA.ARPA
Resent-To:    info-cpm@CSNET-RELAY.ARPA


Ken Brookner requested info on HD64180 systems. I know of two types:

Steve Ciarcia (of BYTE fame) thru the Circuit Cellar offers a single 
board computer with HD64180, 256K RAM, floppy controller, etc. for $369,
with Z-System software for $499. There are a couple of add-on boards with
modem/voice communications and SCSI interface available.

There are a couple of companies offering S-100 bus boards with similar
capabilities as well as access to other S-100 boards for additional
hardware capabilities.

As far as software, you could also run CP/M since the HD64180 executes
Z80 machine code directly. The HD64180 would be a natural for CP/M 3.0
since it's extended addressing fits CP/M's idea of banked memory quite
well. For those with a little more adventurous spirits, I would 
recommend using the Z-system instead. It consists of ZCPR, a replacement
for CP/M's CCP that can be used with a slightly modified CP/M BIOS, and
ZRDOS, a complete replacement for the CP/M BDOS/BIOS. Z-system currently
offers a number of nice features over CP/M. There are some new versions
coming out that support banked memory and multi-tasking on the HD64180.
(If anyone from Echelon is listening, would comment on availablity dates?)
One of the big advantages of the Z-system is the large and continually
growing collection of utility programs that take advantage of it's special
features. And, as you might have gathered, it is alive and well with
committed support, unlike CP/M's death under Digital Research.


			Bob Haar

[usual disclaimer == these opinions are purely my own personal ones, not
that of my employer, my wife and kids, or the guinea pig.]
 2-Jul-86 12:32:54-MDT,994;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 12:32:46-MDT
Received: from brl-aos.arpa by AMSAA.ARPA id ab00280; 2 Jul 86 13:43 EDT
Received: from hi-multics.arpa by AOS.BRL.ARPA id a010435; 2 Jul 86 13:34 EDT
Acknowledge-To:  Dearden@HI-MULTICS.ARPA
Date:  Wed, 2 Jul 86 09:47 CDT
From:  Dearden@HI-MULTICS.ARPA
Subject:  Re: uuen/de code and software exchange
To:  info-cpm@BRL.ARPA
Message-ID:  <860702144750.866991@HI-MULTICS.ARPA>

I'm not in favor of binary only public domain software.  There are too
many brain-damaged idiots out there that think a good joke is to write a
program to trash the system, call it something else, and release it to
the public domain with a name that sounds like it does something great.
I like to see what I'm getting, and I trust no one.

Besides, if you don't have the source, you can't play with the operation
of the code if you are so inclined.

John Dearden -at Hi-Multics
 2-Jul-86 21:29:23-MDT,896;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 21:29:17-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a008451; 2 Jul 86 22:23 EDT
Received: from USENET by SMOKE.BRL.ARPA id a009107; 2 Jul 86 22:10 EDT
From: "Nicholas B. Mason" <mason%noscvax.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Spread sheet for cpm wanted
Message-ID: <550@noscvax.UUCP>
Date: 2 Jul 86 20:28:24 GMT
Keywords: spreadsheet, cpm, Eagle pc
To:       info-cpm@AMSAA.ARPA






 I have a friend who is looking for a GOOD, inexpensive
 spread sheet program for an eagle PC running CPM.

 Does any one have suggestions?

 Thanks in advance:



	  Nick Mason
	  NOSC    San Diego , CA
          mason@nosc

	ihnp4  \
        akgua   \
        decvax   ------------------!sdcsvax!noscvax!mason
        dcdwest /
        ucbvax /
 2-Jul-86 22:39:28-MDT,1183;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 2 Jul 86 22:39:13-MDT
Received: from brl-aos.arpa by AMSAA.ARPA id a008644; 2 Jul 86 23:55 EDT
Received: from hi-multics.arpa by AOS.BRL.ARPA id a024463; 2 Jul 86 23:56 EDT
Acknowledge-To:  Wilkinson@HI-MULTICS.ARPA
Date:  Wed, 2 Jul 86 22:29 CDT
From:  Wilkinson@HI-MULTICS.ARPA
Subject:  Cromenco Z-2 Computer
To:  "{forum >udd>reflecs>bv>mtg>home.forum}"@HI-MULTICS.ARPA, 
     "{forum >site>forum_dir>micros.forum}"@HI-MULTICS.ARPA, 
     info-cpm@BRL.ARPA
Message-ID:  <860703032913.565394@HI-MULTICS.ARPA>

A friend of mine has a line on a Cromenco Z-2 CPM computer system with
PFD 8" drives and a Hazeltine 1500 terminal.  He would like to know:
 1) is Cromenco still in business and if so how to get in touch with them.
 2) where might there be software and hardware sources for programs and
documentation for this system.
 3) any ones opinions as to what they think of the system as a personal,
get-to-know computers for a couple of retirees?
          Richard Wilkinson  {Wilkinson@HI-MULTICS.ARPA}
                    (612) 542-7788 (days after the 20th)
 3-Jul-86 00:04:20-MDT,7020;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 3 Jul 86 00:03:30-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a008930; 3 Jul 86 1:02 EDT
Date: Wed, 2 Jul 1986  23:03 MDT
Message-ID: <KPETERSEN.12219635696.BABYL@SIMTEL20.ARPA>
Sender: KPETERSEN@SIMTEL20.ARPA
From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
To:   Info-Cpm@AMSAA.ARPA
Subject: New files uploaded to SIMTEL20 during June

The following is a list of new files added to SIMTEL20's <CPM.*>
directories between 1-June-86 and 30-June-86.  For a complete list
of all files, get PD:<CPM>CPM.CRCLST.  FILES.DIR and CPM.IDX are also
available in that directory.

        Filename                Type     Bytes   CRC

PD:<CPM.22RSX>
	RSX12.LBR.1		BINARY	 40960  46A9H

PD:<CPM.BASIC>
	MBAS521.MOD.1		ASCII	  2414  0710H
	ZBASDEMO.LBR.1		BINARY	 37248  16DAH

PD:<CPM.BBSLISTS>
	ABBL-07.LBR.1		BINARY	 38272  330EH
	BBSRGJUN.LBR.1		BINARY	139008  A61FH
	FUBBS.JUN.1		ASCII	 87410  F60FH
	FUBBSX.BAS.1		ASCII	  2553  2EB8H
	GOVTBBS.LST.1		ASCII	  8264  156FH
	PDFT-066.LQT.1		BINARY	 10880  4F35H
	QXRCPM02.LQT.1		BINARY	 10496  0E03H
	RCPM076.LQT.1		BINARY	 57088  6A7CH

PD:<CPM.BDOS>
	P2DOS.LBR.1		BINARY	 96512  8896H
	P2DOS.MSG.1		ASCII	   817  3ADAH

PD:<CPM.BYE5>
	B5-CPM3.AQM.6		BINARY	  3328  1690H
	B5-CPM3.DQC.6		BINARY	  4992  E008H
	B5-DRIV3.AQM.6		BINARY	  1920  C710H
	B5-TIME.IQF.6		BINARY	  1792  77EBH
	B5IM-1.DQC.6		BINARY	  4992  B057H
	BDOS.AQM.5		BINARY	  2176  A11DH
	BYE5.DQC.6		BINARY	 24448  64A9H
	BYE5.HQS.6		BINARY	 14336  2721H
	BYE5-INS.LQT.3		BINARY	  3712  9DCCH
	BYE508.AQM.1		BINARY	 85376  6B47H
	BYE508.LBR.1		BINARY	157056  3DFDH
	BYE508C.AQM.1		BINARY	 46464  E349H
	KMD20.LBR.1		BINARY	 33152  DDB7H
	LCHEAD.BYE.4		ASCII	   829  9F63H
	MERCURY.DQC.4		BINARY	  2944  B778H
	QX10-BYE.FQX.5		BINARY	  2048  70C7H
	TEST.BAS.5		ASCII	   854  2614H
	Z3&RCPM.FQX.2		BINARY	  2560  9FBAH

PD:<CPM.CATLOG>
	FATCAT24.LBR.1		BINARY	157824  05D4H
	FATCAT2X.BUG.1		ASCII	   938  B414H
	KPRTLSTP.LBR.1		BINARY	 27776  1137H

PD:<CPM.CCP>
	EPEX11.NQT.1		BINARY	  1664  08F5H

PD:<CPM.CPM3>
	SIDRSX11.LBR.1		BINARY	  3968  411AH

PD:<CPM.CPM68K>
	SD68K.LBR.1		BINARY	 27136  7CDEH

PD:<CPM.CPMLIB>
	UNARC12.LBR.1		BINARY	104448  AC35H

PD:<CPM.DIRUTL>
	AKA13.LBR.1		BINARY	 12032  6F2EH

PD:<CPM.DIRUTL>
	DA21C.LBR.1		BINARY	  7296  E0DBH
	SD116A.LBR.1		BINARY	 83968  DD1EH
	SSD.LBR.1		BINARY	 70784  3664H
	VOL-2.LBR.1		BINARY	  9216  5E23H
	DSKDRV16.LBR.1		BINARY	 44288  9F32H

PD:<CPM.EDUCATION>
	SPELLBE4.LBR.1		BINARY	  7424  9C5AH
	TTYPE3.LBR.1		BINARY	 48128  E1FCH
	TYPTEACH.LBR.1		BINARY	 26752  B6A2H

PD:<CPM.FILE-DOCS>
	JUNBEST.LQT.1		BINARY	 27776  0834H
	MAYBEST.LQT.1		BINARY	 25728  C801H

PD:<CPM.GENDOC>
	BYONDZ80.TQT.1		BINARY	  3200  B1F6H
	CD-DISKS.TQT.1		BINARY	  2048  8BFEH

PD:<CPM.GENIE>
	GENIE.BBS.1		ASCII	  2020  EE26H
	GENIE.CPM.1		ASCII	  1030  F1ECH
	GENIE.IBM.1		ASCII	   999  A52AH
	GENIE.IDX.1		ASCII	  2017  1B11H
	GENIE57.UQD.1		BINARY	  3584  0186H

PD:<CPM.HAMRADIO>
	NORADIO.601.1		ASCII	  9013  59EAH

PD:<CPM.HELP>
	RATFOR.HQP.1		BINARY	 12160  5924H

PD:<CPM.KAYPRO>
	DIRF37KP.LBR.1		BINARY	 26624  BA55H
	DVOAK.TQT.1		BINARY	  2432  A95FH
	HARDDISK.TQT.1		BINARY	  3840  9477H
	JUL86.MQG.1		BINARY	 20096  F324H
	K256BIOS.LBR.1		BINARY	 48256  9F81H
	KAY256.MSG.1		ASCII	  1473  99DAH
	KP2-EDIT.LBR.1		BINARY	  6784  EF69H
	M100-KP.LBR.1		BINARY	 14592  7CDCH
	TROMHINT.LBR.1		BINARY	  2304  73A7H

PD:<CPM.LIST>
	BRAD-WS.TQP.1		BINARY	  1024  615BH
	BRADCON.LBR.1		BINARY	 47360  BF44H
	BRADFORD.MQG.1		BINARY	  3456  ECF0H
	BRADZEX.LBR.1		BINARY	  6272  52FDH
	PRINT24A.LBR.1		BINARY	  4480  EB9FH
	PRNTCHAR.LBR.1		BINARY	  8448  85D8H

PD:<CPM.MBBS>
	MBYE44.LBR.1		BINARY	 83840  6937H

PD:<CPM.MEX>
	MEX114.REV.1		ASCII	  7630  6EFEH
	MEX114KP.NQT.1		BINARY	  5632  C978H

PD:<CPM.MICNET>
	BP.C.1			ASCII	 17377  426BH
	CISB.ANNOUNCE.1		ASCII	  2289  FA5BH
	CISB.MSG.1		ASCII	  1092  1AEEH
	DTE.C.1			ASCII	  4126  64A3H

PD:<CPM.MISC>
	ROYALOAK.DQR.1		BINARY	 78976  AFF2H

PD:<CPM.MODEM>
	1200$87.MDM.1		ASCII	  1736  3BCDH

PD:<CPM.MODEM7>
	M7-OVL29.LQT.1		BINARY	  4096  D44DH

PD:<CPM.NUBYE>
	NU-CLOCK.LBR.1		BINARY	 76800  1815H
	NUBY-INS.LBR.1		BINARY	144384  24BDH
	NUBY-SUP.LBR.1		BINARY	 33792  B257H
	NUBYE100.LBR.1		BINARY	143232  9096H
	NUKMD100.LBR.1		BINARY	124928  B9C2H

PD:<CPM.RCPM>
	BBSETIQ.TQT.1		BINARY	  4096  5694H
	CD7.AQM.1		BINARY	  9344  2CDDH
	PBBS03.LBR.1		BINARY	212480  7FB2H
	PBBSUAR1.LBR.1		BINARY	 11776  9997H
	PBBSUP-3.LBR.1		BINARY	 89472  9C2EH
	SYSOP.TQT.1		BINARY	  2944  6260H
	WIS105.LBR.1		BINARY	 18176  99E6H
	ZCMD26.LBR.1		BINARY	 60032  AC63H

PD:<CPM.SQU-PORT>
	SQUPORT2.C70MODS.1	ASCII	  1848  C111H

PD:<CPM.SQUSQ>
	COMPRESS.TQT.1		BINARY	  7296  014EH
	CRNCH12S.LBR.1		BINARY	 55552  98C1H
	CRUNCH12.LBR.1		BINARY	 48512  5CB7H

PD:<CPM.STARTER-KIT>
	COMPRESS.TXT.1		ASCII	 12480  32BDH

PD:<CPM.SYSUTL>
	SWITCHIO.LBR.1		BINARY	  9984  1368H

PD:<CPM.TOPS-20>
	TMODEM.MAC.400		ASCII	129054  2229H

PD:<CPM.TRS-80>
	M100-XMD.LBR.1		BINARY	 10496  BD64H
	M100LF.BAS.1		BINARY	  1280  FE4AH

PD:<CPM.TURBOPAS>
	APLSND.PAS.1		ASCII	  1901  D67EH
	MAKEDOC.LBR.1		BINARY	  4992  4644H
	MAPSTATS.LBR.1		BINARY	 65536  9189H
	MULTASK.PQS.1		BINARY	  5120  8C6AH
	NICEPRNT.LBR.1		BINARY	 18432  262BH
	PAMPHLET.LBR.1		BINARY	 21632  4BC0H
	PASCSCR.LBR.1		BINARY	 19968  8B2DH
	PMLINK.LBR.1		BINARY	 26240  ABF1H
	RECIPE.PQS.1		BINARY	  6656  D380H
	RESCUE.LBR.1		BINARY	 13568  BBBEH
	SCRNGEN.LBR.1		BINARY	 33280  C12CH
	TP-UTIL.LBR.1		BINARY	102272  DDC6H
	TURBSCR.LBR.1		BINARY	 14976  E489H
	WIPE.PAS.2		ASCII	   541  4AEBH

PD:<CPM.TXTUTL>
	FIX14.LBR.1		BINARY	 13312  D7D3H
	PRN36.LBR.1		BINARY	 74112  8D8EH
	SKIM.LBR.1		BINARY	 13184  32BAH
	TEXTCOM.LBR.1		BINARY	 22528  00C2H
	TXTL.LBR.1		BINARY	 10880  452CH

PD:<CPM.VDOEDIT>
	VDE21.HLP.1		ASCII	  2715  3F01H
	VDE211.LBR.1		BINARY	 47232  3C91H
	VDE21OVR.PQ8.1		BINARY	  7936  657BH

PD:<CPM.WORLDBBS>
	-README.JUNE86.1	ASCII	   533  E072H
	BBSAPI.TXT.1		ASCII	  2801  9840H
	BBSCAI.TXT.1		ASCII	 15059  101FH
	BBSCAN.TXT.1		ASCII	  7275  2B30H
	BBSEUR.TXT.1		ASCII	  6521  623DH
	BBSUSA.TXT.1		ASCII	 28529  6034H
	BBSUSC.TXT.1		ASCII	 31527  416FH
	BBSUSE.TXT.1		ASCII	 16799  EFFEH
	BBSUSN.TXT.1		ASCII	 20274  7B5AH
	BBSUSP.TXT.1		ASCII	 32895  B8F2H
	BBSUSS.TXT.1		ASCII	 21280  7A5FH
	BBSUSW.TXT.1		ASCII	 21346  3229H

PD:<CPM.WSTAR>
	OUTLN.LBR.1		BINARY	  4992  4F51H
	WSGEMINI.LBR.1		BINARY	  7168  B594H

PD:<CPM.ZMODEM>
	GZ..1			ASCII	    15  0792H
	RBSB.C.2		ASCII	  4578  A4D4H
	RZ.C.1			ASCII	 25408  10B5H
	RZSZZM.LBR.1		BINARY	 72320  6224H
	SZ.1.2			ASCII	  8931  EFA6H
	SZ.C.1			ASCII	 26986  62E4H
	SZ.MAN.3		ASCII	 10468  EAB4H
	ZMODEM.RQC.1		BINARY	 10368  0AA5H

--Keith
 3-Jul-86 12:49:59-MDT,1232;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 3 Jul 86 12:49:25-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a024899; 3 Jul 86 13:54 EDT
Received: from USENET by SMOKE.BRL.ARPA id a029676; 3 Jul 86 13:46 EDT
From: Richard Jennings <jennings%sage.cs.reading.ac.uk@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Re: RAM DISK FOR C128
Message-ID: <201@sage.cs.reading.Ac.Uk>
Date: 1 Jul 86 22:23:04 GMT
Posted: Tue Jul  1 22:23:04 1986
To:       info-cpm@AMSAA.ARPA

In article <1754@brl-smoke.ARPA> PFENNIGER%CGEUGE51.BITNET@WISCVM.ARPA writes:
> I HAVE A COMMODORE C128 WHICH I USE IN THE CP/M MODE MOSTLY. I WOULD VERY
>MUCH LIKE TO KNOW IF ANY OF YOU C128 OWNERS OUT THERE HAVE THOUGHT OF USING
>64K OF THIS MEMORY AS A RAM DISK WITH THE OTHER 64K AS PROGRAM MEMORY....

Errrmm, doesn't the C128 run CP/M Plus????!!!!!!
If so, you need both 64K pages:- one for system and one for TPA -  this saves
you warm-booting all the time and having a system eating up 1/4 of all your
discs.
--
Richard Jennings (incomprehensible jargon follows):
        _^_                   jennings@sage.cs.reading.UUCP
       <o|o>
        / \    - remember space invaders??
 5-Jul-86 10:16:37-MDT,1736;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 5 Jul 86 10:16:27-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a004140; 5 Jul 86 11:45 EDT
Received: from USENET by SMOKE.BRL.ARPA id a021597; 5 Jul 86 11:40 EDT
From: hong%garfield.uucp@BRL.ARPA
Newsgroups: net.micro.cpm
Subject: CPM HELP
Message-ID: <1324@garfield.UUCP>
Date: 4 Jul 86 15:00:50 GMT
Sender: perry%garfield.uucp@BRL.ARPA
To:       info-cpm@AMSAA.ARPA

recently, i got more invloved with my apple with cpm.
except some common commands like pip, stat and wordstar,
i don't know much about cpm.
i downloaded many startrek programs from toronto RCPM, i can't compile
most of thee startrek games. some because of space limit or many
errors. i, then, followed the simple doc with a game called 'strtrk/1.bas'
which tells me it may compile with basic-e,(a public domain basic compiler
which i also download from there). some problems meet, the startrek games
i downloaded with source, some are not compatible with basic-e or the source
file is damaged( i found some incomplete statements).
i only succeed in compile on version with basic-e, can anyone give me
some more info about basic-e, like the book.
any better suggestions about a better basic compiler?
any good public domain word processor you have used? send me the name
of the program, so i can search through RCPM.
now, i found that many good cpm programs are in public domain, can you
suggest some of them?
i have used modem7, mex, nulu ,d and cat.
any apple users have successfully run/compile the bigtrek?
is it possible for us to compile/run a big basic program like that in
the 56K cpm v2.2 with an apple?
thanks a lot.
HONG
 5-Jul-86 18:31:32-MDT,939;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 5 Jul 86 18:31:23-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a004943; 5 Jul 86 19:42 EDT
Received: from USENET by SMOKE.BRL.ARPA id a023828; 5 Jul 86 19:40 EDT
From: h1c%psuecl.bitnet@BRL.ARPA
Newsgroups: net.micro.cpm
Subject: Kermit for Epson QX-10 computer ?
Message-ID: <302@PSUECL>
Date: 5 Jul 86 08:56:30 GMT
To:       info-cpm@AMSAA.ARPA


        Can anyone tell me where I can find a kermit for Epson Qx-10
computer ?   My machine runs CP/M-80 operating system version 2.2 and
2.25.  The main feature of this machine is that the computer terminal
modeled after the TVI-920 terminal.  I also would like to know any
communication programs can emulate VT-100 under this operating system.

Your reply will be much grateful.  Thanks in advance.

                        Heng Chang   Bitnet: H1C@PSUECL

     
 6-Jul-86 10:49:28-MDT,2453;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 6 Jul 86 10:49:17-MDT
Received: from brl-aos.arpa by AMSAA.ARPA id a006524; 6 Jul 86 12:13 EDT
Received: from mit-mc.arpa by AOS.BRL.ARPA id a005849; 6 Jul 86 12:06 EDT
Received: from MX.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 6 JUL 86  12:04:31 EDT
Date: Sun,  6 Jul 86 12:05:14 EDT
From: "Robert L. Plouffe" <PLOUFF%MX.LCS.MIT.EDU@MIT-MC.ARPA>
Subject: LE, SPERRY, CLK UTLS
To: INFO-MICRO%MX.LCS.MIT.EDU@MIT-MC.ARPA, INFO-CPM%MX.LCS.MIT.EDU@MIT-MC.ARPA, 
    info-ibmpc@USC-ISIB.ARPA
cc: PLOUFF%MX.LCS.MIT.EDU@MIT-MC.ARPA
Message-ID: <[MX.LCS.MIT.EDU].931509.860706.PLOUFF>

The file EDGCLK.ARC has been uploaded to SIMTEL20 and located
in PD:<MSDOS.COMPATIBLES>EDGCLK.ARC.

This ARC file contains the source and executable files for two
utilities that will be useful to owners of Leading Edge, Model M
and Sperry PC personal computers. (Maybe Model D also. See below.)
They are:

	LE_MCLK   Reads the on-board battery backed-up clock
		  and sets the current clock to its values.
		  This code is intended to be executed in your
		  AUTOEXEC.BAT file.  The .COM file is only 28 bytes.

	SETCLK    Sets the date and time of the battery backed-up
		  clock and simultaneously updates the current clock.

The function of LE_MCLK is built into DOS 2.11 as supplied with
the machine, and the v2.11 COMMAND.COM will update the battery
clock with the internal DATE and TIME commands.  So, if you stick
with DOS 2.11 you don't need these utilities.  However if you
upgrade your DOS to 3.xx, you will find that it has no knowledge
of the on-board battery backed-up clock.  These utilities will then
do the job and restore full function to the use of the battery clock.

The programs use an undocumented feature of the on-board
ROM BIOS. The Time-of Day interrupt (INT 1AH) has four additional
functions beyond that of the IBMPC ROM BIOS. This is fully explained
in the documentation.

I suspect that the DOS 2.11 supplied with the Leading Edge, Model D
is identical to the one supplied with the Model M.  If so, then the
ROM BIOS must also provide the same functionality for the additional
INT 1AH functions  - so this code will probably work with a model D
also.   Someone who has a Model D please let me know.  Reply to
PLOUFF at MIT-MX since I am not on all of the mailing lists to which
this is directed.

 8-Jul-86 11:41:18-MDT,854;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 8 Jul 86 11:41:03-MDT
Received: from brl-aos.arpa by AMSAA.ARPA id a011500; 8 Jul 86 12:45 EDT
Received: from xerox.arpa by AOS.BRL.ARPA id a016692; 8 Jul 86 12:43 EDT
Received: from CheninBlanc.ms by ArpaGateway.ms ; 08 JUL 86 09:41:23 PDT
Date: 8 Jul 86 09:41:19 PDT (Tuesday)
From: CMadsen.ES@XEROX.ARPA
Subject: Re: uuen/de code and software exchange
In-reply-to: <860702144750.866991@HI-MULTICS.ARPA>
To: Dearden@HI-MULTICS.ARPA
cc: info-cpm@BRL.ARPA
Message-ID: <860708-094123-1838@Xerox>

I agree with you.There are to many IDIOTS out there.Really I should say
To many 
Childish people on the net.Instead of using the Net as a tool;They
rather screw it  up for everbody else.

I think the Sources should be given as will!!

--Carl
10-Jul-86 11:01:53-MDT,852;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 11:01:42-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a014900; 10 Jul 86 12:18 EDT
Received: from USENET by SMOKE.BRL.ARPA id a019630; 10 Jul 86 12:17 EDT
From: Sunil Bhargava <sunil@BRL-SMOKE.ARPA>
Newsgroups: net.micro.cpm,net.micro.pc,net.wanted
Subject: Re: Removal from mailing list.
Message-ID: <2076@brl-smoke.ARPA>
Date: 10 Jul 86 16:17:45 GMT
Expires: 7/17/86
Keywords: sale wanted
To:       info-cpm@AMSAA.ARPA

I want a second hand baby blue board for an ibm pc.  That is the
cpm emulation board for the pc.  I am willing to pay about $100 for
one in perfect working condition, with manual and software.  Please
reply to me directly since I am not on this mailing list.

   thanx

Reply-to:  sunil@brl.arpa

10-Jul-86 15:56:41-MDT,509;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 15:56:35-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a023537; 10 Jul 86 17:19 EDT
Received: from USENET by SMOKE.BRL.ARPA id a003503; 10 Jul 86 17:07 EDT
From: "Virginia A. Kaste <ginny>" <ginny@BRL-SMOKE.ARPA>
Newsgroups: net.micro.cpm
Subject: testing distributions again
Message-ID: <2094@brl-smoke.ARPA>
Date: 10 Jul 86 21:07:48 GMT
To:       info-cpm@AMSAA.ARPA


for info-cpm

10-Jul-86 18:15:39-MDT,778;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 18:15:26-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a024000; 10 Jul 86 19:45 EDT
Received: from USENET by SMOKE.BRL.ARPA id a007586; 10 Jul 86 19:43 EDT
From: "Steve Miller@ex6191" <miller%qantel.uucp@BRL.ARPA>
Newsgroups: net.micro.68k,net.micro.cpm
Subject: CPM 68K CCP
Message-ID: <657@qantel.UUCP>
Date: 9 Jul 86 03:59:25 GMT
To:       info-cpm@AMSAA.ARPA


	Does anyone know where I can get information on writing a
new CCP for CP/M 68K Version 1.2. I called DRI and they don't have
any information for the general public. I would like to add features
much like ZCPR but in the CP/M 68K enviroment. Please Email any 
information you may have.
10-Jul-86 20:09:59-MDT,2605;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 10 Jul 86 20:09:50-MDT
Received: from mit-mc.arpa by AMSAA.ARPA id a024131; 10 Jul 86 21:26 EDT
Received: from MX.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 10 JUL 86  21:28:22 EDT
Date: Thu, 10 Jul 86 21:26:25 EDT
From: "Robert L. Plouffe" <PLOUFF%MX.LCS.MIT.EDU@mit-mc.ARPA>
Subject:  [PLOUFF%MX.LCS.MIT.EDU: LE, SPERRY, CLK UTLS]
To: info-micro@BRL.ARPA, info-cpm@AMSAA.ARPA
Message-ID: <[MX.LCS.MIT.EDU].932196.860710.PLOUFF>

Date: Sun,  6 Jul 86 12:05:14 EDT
From: Robert L. Plouffe <PLOUFF%MX.LCS.MIT.EDU at MIT-MC.ARPA>
To:   INFO-MICRO%MX.LCS.MIT.EDU at MIT-MC.ARPA,
      INFO-CPM%MX.LCS.MIT.EDU at MIT-MC.ARPA,
      info-ibmpc at USC-ISIB.ARPA
cc:   PLOUFF%MX.LCS.MIT.EDU at MIT-MC.ARPA
Re:   LE, SPERRY, CLK UTLS

The file EDGCLK.ARC has been uploaded to SIMTEL20 and located
in PD:<MSDOS.COMPATIBLES>EDGCLK.ARC.

This ARC file contains the source and executable files for two
utilities that will be useful to owners of Leading Edge, Model M
and Sperry PC personal computers. (Maybe Model D also. See below.)
They are:

	LE_MCLK   Reads the on-board battery backed-up clock
		  and sets the current clock to its values.
		  This code is intended to be executed in your
		  AUTOEXEC.BAT file.  The .COM file is only 28 bytes.

	SETCLK    Sets the date and time of the battery backed-up
		  clock and simultaneously updates the current clock.

The function of LE_MCLK is built into DOS 2.11 as supplied with
the machine, and the v2.11 COMMAND.COM will update the battery
clock with the internal DATE and TIME commands.  So, if you stick
with DOS 2.11 you don't need these utilities.  However if you
upgrade your DOS to 3.xx, you will find that it has no knowledge
of the on-board battery backed-up clock.  These utilities will then
do the job and restore full function to the use of the battery clock.

The programs use an undocumented feature of the on-board
ROM BIOS. The Time-of Day interrupt (INT 1AH) has four additional
functions beyond that of the IBMPC ROM BIOS. This is fully explained
in the documentation.

I suspect that the DOS 2.11 supplied with the Leading Edge, Model D
is identical to the one supplied with the Model M.  If so, then the
ROM BIOS must also provide the same functionality for the additional
INT 1AH functions  - so this code will probably work with a model D
also.   Someone who has a Model D please let me know.  Reply to
PLOUFF at MIT-MX since I am not on all of the mailing lists to which
this is directed.

11-Jul-86 17:37:09-MDT,1120;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Fri 11 Jul 86 17:36:57-MDT
Received: from edwards-2060.arpa by AMSAA.ARPA id a009860; 11 Jul 86 18:42 EDT
Date: Fri 11 Jul 86 15:44:01-PDT
From: BUSSARD@EDWARDS-2060.ARPA
Subject: XOR S-100 4 system
To: info-cpm@AMSAA.ARPA
cc: BUSSARD@EDWARDS-2060.ARPA
Message-ID: <12221925879.13.BUSSARD@EDWARDS-2060.ARPA>

	I  complete set of the manuals for the S100-4 system and the basic 
manual for the 12 slot chassis also. Like most people I have one problem 
with the system, B drive spends alot of time (about 90%) being not ready. 
The drives (8" Tandon Thinlines)seem check out ok on other systems and disk 
controllers? Not long before they quit the s-100 market,I got a bios upgrade
from them, fall of '84 I think. Would like to hear from owners and users.
Send mail directly to: Bussard@Edwards-2060

Note: That it is only B drive not ready not A or the 5.25" on C & D. Have 
replaced all of the devices on the disk controller that, though seem good, 
could be suspect.

      
Lewis G. Bussard

-------
14-Jul-86 12:33:37-MDT,736;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 14 Jul 86 12:33:23-MDT
Received: from xerox.arpa by AMSAA.ARPA id a002442; 14 Jul 86 13:46 EDT
Received: from CheninBlanc.ms by ArpaGateway.ms ; 14 JUL 86 10:47:31 PDT
Date: 14 Jul 86 10:38:04 PDT (Monday)
From: Chapman.ES@xerox.ARPA
Subject: Anyone ever heard of a TI99?
To: Info-Micro@AMSAA.ARPA, Info-cpm@AMSAA.ARPA
cc: Chapman.ES@xerox.ARPA
Message-ID: <860714-104731-2027@Xerox>

A friend here in Southern California has one of these and is looking for
other people with it.  He'd be interested in any pointers to clubs in
the SoCal area.  He also needs a word processor.  What is available for
this machine?

Cheryl

15-Jul-86 13:54:33-MDT,24450;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 15 Jul 86 13:52:50-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a003582; 15 Jul 86 13:55 EDT
Received: from USENET by SMOKE.BRL.ARPA id a013818; 15 Jul 86 13:47 EDT
From: Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: uuencode source, com, and discussion
Message-ID: <1811@ecsvax.UUCP>
Date: 15 Jul 86 01:01:42 GMT
To:       info-cpm@AMSAA.ARPA


I apologize for the delay.  This message and the one that follows
contain the Turbo Pascal source and uuencoded binaries for uuencode
and uudecode to run under CP/M 2.2 (and probably 3.0).  I know
that posting software to net.micro.cpm is not very usual, but I received
a number of requests for the source and/or binaries, and rather than
try to send to individuals, I decided to post.
 
Re my suggestion that CP/Mers exchange software via the net:  I have
a couple of responses to mail and news followups.  First, what I
would suggest is that software exchange take one of two forms--either
posting articles containing only source and documentation, which would
best be applied to programs written for ASM and maybe Turbo, both of 
which are almost universally accessible (or MBASIC, I suppose); or
for software written in less universal languages, posting files with
a short header describing the contents, followed by a uuencoded 
library file containing source, documentation, and object code.  I've
noticed lately that most newer software on RCPM systems is packaged
this way, and it does seem sensible.  If the .LBR file is squeezed
before uuencoding, on average the uuencoded version will be no larger
than the unsqueezed original.  We might want to establish either a
net.micro.cpm.sources or something similar if there was a lot of traffic,
but perhaps at first could just use net.micro.cpm, since the volume is
now low anyway.  I do agree that source should always be included when
it is available (and perhaps not too huge.  240k .ASM files would
probably be stretching things).
 
To start things off, then, in response to popular request, here follow
uuencode.pas and uuencode.uue (the encoded binary, which can be decoded
with UN*X uudecode before downloading to your system).  The files are
separated by ---------------CUT HERE-----------lines, since I've
never figured out how to package shar files.
 
Ross Alford
   ...mcnc!ecsvax!alford
----------------------CUT HERE----------for uuencode.pas---------
Program uuencode;

  CONST header = 'begin';
        trailer = 'end';
        defaultMode = '644';
        defaultExtension = '.uue';
        offset = 32;
        charsPerLine = 60;
        bytesPerHunk = 3;
        sixBitMask = $3F;
        endofinfile : boolean = FALSE;

  TYPE string80 = string[80];

  VAR inf : file;
      outfile: text;
      infilename, outfilename, mode: string80;
      lineLength, numbytes, bytesInLine: integer;
      line: array [0..59] of char;
      hunk: array [0..2] of byte;
      chars: array [0..3] of byte;


{  procedure debug;

    var i: integer;

    procedure writebin(x: byte);

      var i: integer;

      begin
        for i := 1 to 8 do
          begin
            write ((x and $80) shr 7);
            x := x shl 1
          end;
        write (' ')
      end;

    begin
      for i := 0 to 2 do writebin(hunk[i]);
      writeln;
      for i := 0 to 3 do writebin(chars[i]);
      writeln;
      for i := 0 to 3 do writebin(chars[i] and sixBitMask);
      writeln
    end;  }

{Binary file read added by Ross Alford,  ...!mcnc!ecsvax!alford.  The original
 MSDOS versions of uuencode/decode just use read/write on a FILE OF BYTE.
 CP/M Turbo expects some file info to be stored in the first 4 bytes of files
 of any type other than TEXT.  Getbyte (below) and Putbyte (in UUDECODE)
 bypass this 'feature' by using blockread and blockwrite.  The only global
 variables either use are 'infilename' and 'inf' or 'outfilename' and 'outf'}

function getbyte(var b : byte) : boolean;

type bufptr = ^bufrec;
     bufrec = record
                next : bufptr;
                buffer : array[1..128] of byte
              end;

const sectstobuf = 8;                {max number of sectors to buffer}
      sectsread : integer = 0;       {constants are essentially statics}
      bytptr : integer = 129;
      notopen : boolean = TRUE;
      j : integer = 0;
      infsize : integer = 0;
      listsave : integer  = 0;

var list,temp,temp2 : bufptr;

begin
  if notopen then
    begin
      notopen := FALSE;
      assign(inf,infilename);
      {$i-}
      reset(inf);
      {$i+}
      if ioresult <> 0 then
        begin
          writeln('File ',infilename,' not found.  Aborting');
          halt
        end;
      infsize := filesize(inf);
      new(list);
      list^.next := NIL;
      listsave := ord(list);
      sectsread := 0
    end;
  list := ptr(listsave);
  if bytptr > 128 then
    begin
      if list^.next <> NIL then
        begin
          temp := list^.next;
          dispose(list);
          list := temp;
          bytptr := 1
        end
        else begin
          dispose(list);
          list := NIL;
          j := 0;
          while (sectsread<infsize) and (j<sectstobuf) do
            begin
              new(temp2);
              temp2^.next := NIL;
              if list=NIL then
                begin
                  list := temp2;
                  temp := list
                end
                else begin
                  temp^.next := temp2;
                  temp := temp2
                end;
              blockread(inf,temp^.buffer,1);
              j := succ(j);
              sectsread := succ(sectsread)
            end;
          bytptr := 1
        end
    end;
    listsave := ord(list);
    if list <> NIL then
      begin
        b := list^.buffer[bytptr];
        bytptr := succ(bytptr);
        getbyte := TRUE
      end
      else begin
        b := 0;
        getbyte := FALSE
      end
end;

  procedure Abort (message: string80);

    begin {abort}
      writeln(message);
      close(inf);
      close(outfile);
      halt
    end; {abort}

  procedure Init;

    procedure GetFiles;

      VAR i: integer;
          temp: string80;
          ch: char;

      begin {GetFiles}
        if ParamCount < 1 then abort ('No input file specified.');
        infilename := ParamStr(1);
        {$I-}
        assign (inf, infilename);
        reset (inf);
        {$i+}
        if IOResult > 0 then abort (concat ('Can''t open file ', infilename));

        write('Uuencoding file ', infilename);

        i := pos('.', infilename);
        if i = 0
          then outfilename := infilename
          else outfilename := copy (infilename, 1, pred(i));
        mode := defaultMode;
        if ParamCount > 1 then
          for i := 2 to ParamCount do
            begin
              temp := Paramstr(i);
              if temp[1] in ['0'..'9']
                then mode := temp
                else outfilename := temp
            end;
        if pos ('.', outfilename) = 0
          then outfilename := concat(outfilename, defaultExtension);
        assign (outfile, outfilename);
        writeln (' to file ', outfilename, '.');

        {$i-}
        reset(outfile);
        {$i+}
        if IOresult = 0 then
          begin
            Write ('Overwrite current ', outfilename, '? [Y/N] ');
            repeat
              read (kbd, ch);
              ch := Upcase(ch)
            until ch in ['Y', 'N'];
            writeln (ch);
            if ch = 'N' then abort(concat (outfilename, ' not overwritten.'))
          end;
        close(outfile);

        {$i-}
        rewrite(outfile);
        {$i+}
        if ioresult > 0 then abort(concat('Can''t open ', outfilename));
      end; {getfiles}

    begin {Init}
      GetFiles;
      bytesInLine := 0;
      lineLength := 0;
      numbytes := 0;
      writeln (outfile, header, ' ', mode, ' ', infilename);
    end; {init}

  procedure FlushLine;

    VAR i: integer;

    procedure writeout(ch: char);

      begin {writeout}
        if ch = ' ' then write(outfile, '`')
                    else write(outfile, ch)
      end; {writeout}

    begin {FlushLine}
      write ('.');
      writeout(chr(bytesInLine + offset));
      for i := 0 to pred(lineLength) do
        writeout(line[i]);
      writeln (outfile);
      lineLength := 0;
      bytesInLine := 0
    end; {FlushLine}

  procedure FlushHunk;

    VAR i: integer;

    begin {FlushHunk}
      if lineLength = charsPerLine then FlushLine;
      chars[0] := hunk[0] shr 2;
      chars[1] := (hunk[0] shl 4) + (hunk[1] shr 4);
      chars[2] := (hunk[1] shl 2) + (hunk[2] shr 6);
      chars[3] := hunk[2] and sixBitMask;
      {debug;}
      for i := 0 to 3 do
        begin
          line[lineLength] := chr((chars[i] and sixBitMask) + offset);
          {write(line[linelength]:2);}
          lineLength := succ(lineLength)
        end;
      {writeln;}
      bytesInLine := bytesInLine + numbytes;
      numbytes := 0
    end; {FlushHunk}

  procedure encode1;

    begin {encode1};
      if numbytes = bytesperhunk then flushhunk;
      endofinfile := not (getbyte(hunk[numbytes]));
      numbytes := succ(numbytes)
    end; {encode1}

  procedure terminate;

    begin {terminate}
      if numbytes > 0 then flushhunk;
      if lineLength > 0
        then
          begin
            flushLine;
            flushLine;
          end
        else flushline;
      writeln (outfile, trailer);
      close (outfile);
      close (inf);
    end; {terminate}


  begin {uuencode}
    init;
    while not endofinfile do encode1;
    terminate
  end. {uuencode}
----------------------CUT HERE----------for uuencode.uue----------
begin 644 UUENCODE.COM
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
:S1L@(4A_S;`:S1L@R<TH(RK_("8`?>X!;P`!
`
end
15-Jul-86 13:56:42-MDT,23769;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 15 Jul 86 13:55:38-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id aa03582; 15 Jul 86 13:55 EDT
Received: from USENET by SMOKE.BRL.ARPA id a013843; 15 Jul 86 13:47 EDT
From: Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: uudecode: source and .com for CP/M
Message-ID: <1812@ecsvax.UUCP>
Date: 15 Jul 86 01:09:30 GMT
To:       info-cpm@AMSAA.ARPA


This article contains Turbo Pascal source and uuencoded .com versions
of uudecode.com for CP/M.  The encoded version can be decoded by 
UN*X uudecode before downloading.  The source requires Turbo with
built in access to command line arguments (eg 1.0 won't work without
adding your own parser, not too difficult actually).  The files follow,
separated by --------------CUT HERE-----------lines.
 
Ross Alford
   ...mcnc!ecsvax!alford
------------------------CUT HERE-----------for uudecode.pas----------
program uudecode;

  CONST defaultSuffix = '.uue';
        offset = 32;

  TYPE string80 = string[80];

  VAR infile: text;
      outf : file;
      lineNum: integer;
      line: string80;
      outfilename : string80;

{Binary file read added by Ross Alford,  ...!mcnc!ecsvax!alford.  The original
 MSDOS versions of uuencode/decode just use read/write on a FILE OF BYTE.
 CP/M Turbo expects some file info to be stored in the first 4 bytes of files
 of any type other than TEXT.  Putbyte (below) and Getbyte (in UUENCODE)
 bypass this 'feature' by using blockread and blockwrite.  The only global
 variables either use are  'infilename' and 'inf' or 'outfilename' and 'outf'}

procedure putbyte(b : byte; flush : boolean);

type bufptr = ^bufrec;
     bufrec = record
                next : bufptr;
                buffer : array[1..128] of byte
              end;

const sectstobuf = 8;                {max number of sectors to buffer}
      sectswritten : integer = 1;    {constants are essentially statics}
      bytptr : integer = 1;
      notopen : boolean = TRUE;
      infsize : integer = 0;
      listsave : integer  = 0;
      tempsave : integer = 0;

var list,temp,temp2 : bufptr;
    i : integer;

begin
  if flush then
    begin
      list := ptr(listsave);
      temp := list;
      for i := 1 to sectswritten do
        begin
          blockwrite(outf,temp^.buffer,1);
          temp := temp^.next
        end;
      close(outf)
    end
    else begin
      if notopen then
        begin
          notopen := FALSE;
          assign(outf,outfilename);
          {$i-}
          reset(outf);
          {$i+}
          if ioresult = 0 then
            begin
              writeln('File ',outfilename,' exists.  Cannot overwrite.');
              halt
            end;
          {$i-}
          rewrite(outf);
          {$i+}
          if ioresult <> 0 then
            begin
              writeln('Cannot open file ',outfilename,' for output.');
              halt
            end;
          new(list);
          temp := list;
          for i := 1 to sectstobuf - 1 do
            begin
              new(temp2);
              temp2^.next := NIL;
              temp^.next := temp2;
              temp := temp2
            end;
          listsave := ord(list);
          tempsave := listsave;
        end;
      temp := ptr(tempsave);
      if bytptr > 128 then
        begin
          if temp^.next <> NIL then
            begin
              sectswritten := succ(sectswritten);
              temp := temp^.next;
              bytptr := 1
            end
            else begin
              temp := ptr(listsave);
              for i := 1 to sectstobuf do
                begin
                  blockwrite(outf,temp^.buffer,1);
                  temp := temp^.next
                end;
              temp := ptr(listsave);
              sectswritten := 1;
              bytptr := 1
            end
        end;
      temp^.buffer[bytptr] := b;
      bytptr := succ(bytptr);
      tempsave := ord(temp)
    end
end;

  procedure Abort(message: string80);

    begin {abort}
      writeln;
      if lineNum > 0 then write('Line ', lineNum, ': ');
      writeln(message);
      halt
    end; {Abort}

  procedure NextLine(var s: string80);

    begin {NextLine}
      LineNum := succ(LineNum);
      write('.');
      readln(infile, s)
    end; {NextLine}

  procedure Init;

    procedure GetInFile;

      VAR infilename: string80;

      begin {GetInFile}
        if ParamCount = 0 then abort ('Usage: uudecode <filename>');
        infilename := ParamStr(1);
        if pos('.', infilename) = 0
          then infilename := concat(infilename, defaultSuffix);
        assign(infile, infilename);
        {$i-}
        reset(infile);
        {$i+}
        if IOresult > 0 then abort (concat('Can''t open ', infilename));
        writeln ('Decoding ', infilename)
      end; {GetInFile}

    procedure GetOutFile;

      var header, mode : string80;
          ch: char;

      procedure ParseHeader;

        VAR index: integer;

        Procedure NextWord(var word:string80; var index: integer);

          begin {nextword}
            word := '';
            while header[index] = ' ' do
              begin
                index := succ(index);
                if index > length(header) then abort ('Incomplete header')
              end;
            while header[index] <> ' ' do
              begin
                word := concat(word, header[index]);
                index := succ(index)
              end
          end; {NextWord}

        begin {ParseHeader}
          header := concat(header, ' ');
          index := 7;
          NextWord(mode, index);
          NextWord(outfilename, index)
        end; {ParseHeader}

      begin {GetOutFile}
        if eof(infile) then abort('Nothing to decode.');
        NextLine (header);
        while not ((copy(header, 1, 6) = 'begin ') or eof(infile)) do
          NextLine(header);
        writeln;
        if eof(infile) then abort('Nothing to decode.');
        ParseHeader;
      end; {GetOutFile}

    begin {init}
      lineNum := 0;
      GetInFile;
      GetOutFile;
    end; { init}

  Function CheckLine: boolean;

    begin {CheckLine}
      if line = '' then abort ('Blank line in file');
      CheckLine := not (line[1] in [' ', '`'])
    end; {CheckLine}


  procedure DecodeLine;

    VAR lineIndex, byteNum, count, i: integer;
        chars: array [0..3] of byte;
        hunk: array [0..2] of byte;

{    procedure debug;

      var i: integer;

      procedure writebin(x: byte);

        var i: integer;

        begin
          for i := 1 to 8 do
            begin
              write ((x and $80) shr 7);
              x := x shl 1
            end;
          write (' ')
        end;

      begin
        writeln;
        for i := 0 to 3 do writebin(chars[i]);
        writeln;
        for i := 0 to 2 do writebin(hunk[i]);
        writeln
      end;      }

    function nextch: char;

      begin {nextch}
      {}  lineIndex := succ(lineIndex);
        if lineIndex > length(line) then abort('Line too short.');
        if not (line[lineindex] in [' '..'`'])
          then abort('Illegal character in line.');
{        write(line[lineindex]:2);}
        if line[lineindex] = '`' then nextch := ' '
                                  else nextch := line[lineIndex]
      end; {nextch}

    procedure DecodeByte;

      procedure GetNextHunk;

        VAR i: integer;

        begin {GetNextHunk}
          for i := 0 to 3 do chars[i] := ord(nextch) - offset;
          hunk[0] := (chars[0] shl 2) + (chars[1] shr 4);
          hunk[1] := (chars[1] shl 4) + (chars[2] shr 2);
          hunk[2] := (chars[2] shl 6) + chars[3];
          byteNum := 0  {;
          debug          }
        end; {GetNextHunk}

      begin {DecodeByte}
        if byteNum = 3 then GetNextHunk;
        putbyte(hunk[byteNum],FALSE);
        {writeln(bytenum, ' ', hunk[byteNum]);}
        byteNum := succ(byteNum)
      end; {DecodeByte}

    begin {DecodeLine}
      lineIndex := 0;
      byteNum := 3;
      count := (ord(nextch) - offset);
      for i := 1 to count do DecodeByte
    end; {DecodeLine}

  procedure terminate;

    var trailer: string80;

    begin {terminate}
      if eof(infile) then abort ('Abnormal end.');
      NextLine (trailer);
      if length (trailer) < 3 then abort ('Abnormal end.');
      if copy (trailer, 1, 3) <> 'end' then abort ('Abnormal end.');
      close (infile);
      putbyte(26,TRUE)
    end;

  begin {uudecode}
    init;
    NextLine(line);
    while CheckLine do
      begin
        DecodeLine;
        NextLine(line)
      end;
    terminate
  end.
--------------------CUT HERE------------for uudecode.uue-----------
begin 600 UUDECODE.COM
MP^(@S:M#;W!Y<FEG:'0@*$,I(#$Y.#4@0D]23$%.1"!);F, ! "A0@      
M                                                   *3D5#(#@T
M,#%,4R!H:6QI=&5E9610$  )&UL_,FP;9QLJ         !M6            
M      0;/0                 !(" $ P   ALJ    !!L]("   AM%10T 
M AM2?P     "&U0    "&R@Q   "&RDQ     'ZW-\@C]>5^S>@!X?$]R!CS
MS0 "#0H R6_ES:8 R?Z W&L"U(0"YG\8[N4A[@$8!.4AZ $B$P+AX_7%U7XC
MMR@'Y<WH >$8]-'!\>/)?;3(.B0!AX>'X^/CX\4!T@3!/2#T*QCHS= !V"K.
M 1C?]<75Y2&H <TU B&B <W0 2JZ =0= N'1P?')]<75Y2&T 1CI]<75Y2&N
M 1C@]3K@ +<H$,75Y:\RX  AR '--0+AT<'QR?4ZX #^_RCVQ=7E/O\RX  A
MP@$8X_7%U>4AO $8VO7%U>7E$?  (8L! 1  [;#1.IX!3SJ< 8+5S=P"T3J?
M 4\ZG0&#S=P"(?  S= !*J !S1T"X='!\<DA\  &  GK(9L!-#4H A+)&QLA
M"@,& RL.+PR6,/R&]7G^,"@!$A/Q$.W) 0ID(6L!PS4"(7L!PS4"$0, S5\#
MY@$8!A$& ,U? V\F ,D1$@ 8]!$, !@($0\ & ,1"0#AP>4ZW0"W*!K5Q<V@
M 'RU* _-X0/^$R (S>$#_@/*U"#!T2H! !GI(M( >#+= 'FW* L^PS(X "'[
M'R(Y "&E Q&@  $8 .VP(;T#$;@  0P [;"O;V<RT  BU  BU@ ^?C+1 #+@
M ,G#%@/#( /#.0/#+P/#- /#*@/#.0/#( /! (( 0P#$ ,4 P0#%U>7=Y?WE
M]6\F .7-I@#Q_>'=X>'1P<G%U>7=Y?WES:, ?1CK#O\8# X [5O2 !,:_B H
M^B%E  8#S7L$&LVF!/Y!.!+^43 .1Q,:_CH@!GC60!,8 ANO(5P =R,,#2@9
M&LV"!" 3_C\H#_XJ* O^+B@'!@O-=P08$ 8(S5X$&OXN( 83!@/-7@0A:  &
M&#8 (Q#[R1H,#2@(_C\H"?XJ* O-@@0H"W<C$Q#IR1,^/Q@"/B!W(Q#\R<VF
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
+>2;+1<IT=<W1)B%C
 
end
15-Jul-86 15:36:50-MDT,11345;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 15 Jul 86 15:36:09-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id ab03582; 15 Jul 86 13:55 EDT
Received: from USENET by SMOKE.BRL.ARPA id a013856; 15 Jul 86 13:48 EDT
From: Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: l-z-w crunch and uncrunch
Message-ID: <1813@ecsvax.UUCP>
Date: 15 Jul 86 01:32:11 GMT
To:       info-cpm@AMSAA.ARPA


Just to give you something to exercise your new uuencode and uudecode
programs on (see earlier messages for source and object, contact me
if they don't arrive soon), here are two VERY nice utilities for
CP/M.  They compress and expand files using the L-Z-W algorithm, and
typically achieve ratios of 50% or better (crunched/uncrunched) on
text, even WordStar text, which the usual sq/usq pair does fairly
poorly on due to use of high-bit-set ASCII (I suppose).  I do
not have the source for these.  It is available on RCP/M Royal Oak
at 313-759-6569.  I have used these successfully on a Kaypro 4-83,
an Apple running 56k Microsoft CP/M, and a NEC8401 laptop.  These
little programs are amazing.  I wish I had downloaded the source
myself.  If anyone has it, I'm sure a posting would be appreciated.
I apologize to the author for lack of acknowledgment, but the .doc
file included here is unaltered from that in the original .lbr.
 
Ross Alford
   ...mcnc!ecsvax!alford
-----------------CUT HERE for crunch12.doc-----------------




     This  .LBR  file contains Revs 1.2 of CRUNCH  and  UNCRunch.  
These programs are 100% upward and downward compatible with prev-
ious releases.

     These  are data compression utilities. They  are  completely 
analogous to the popular SQueeze and UNSQUEEZE programs, but  use 
a  form of compression known as Lempel-Ziv [-Welch]  rather  than 
Huffman  encoding.  CRUNCH creates the compressed file  from  the 
original, while UNCR recreates the original from the  compressed.  
They  may be used on any type of file, but compression ratio  re-
sults vary according to data type.

-----------------------------------------------------------------

Usage:  CRUNCH  [d:] <filename> [d:]

where  the  first  "d:"  is an optional  source  drive  spec  for 
<filename>  and the second "d:" is an optional destination  drive 
spec  for the resulting compressed file. If either "d:" is  omit-
ted,  the corresponding input or output will be to the  currently 
logged  drive. The output filename will be the same as the  input 
filename with the middle letter of the extension changed to  "Z". 
If a file with this name already exists, it will be  overwritten. 
If the extension of the original file was blank, the extension of 
the   resulting   file  will  be   "ZZZ".   Ambiguous   filenames 
("wildcards") ARE fully supported.

     Additionally,  the command line above can be followed  by  a 
date or other information inside a pair of square brackets.   For 
obvious reasons, this is difficult to show clearly on the command 
usage line, so hopefully this sentence will suffice.  The "stamp" 
information  is recorded in the header of the crunched  file  and 
reproduced  at the console when uncrunching. It has no effect  on 
the resulting uncrunched file.  The stamp may any typeable  char-
acters other than "]", and may be any length that will fit on the 
command line.  A practical limit of 40 characters will be  repro-
duced at the console when uncrunching.

The  cruncher  outputs a running display to the  console  of  the 
form:

nnnn/mmmm  pp%

where  "nnnn"  is #of input records read, "mmmm"  is  #of  output 
records  created,  and  pp%  is  the  current  compression  ratio  
nnnn/mmmm.   When complete, the final line additionally  contains 
the  input and output file sizes converted to "k".  These  values 
are kilobytes (recs/8) upward rounded to the next integral value.

This cruncher will flag the unusual situations where the  result-
ing  file  is larger than the original (ie  compression  ratio  > 
100%). When this occurs, the user will be prompted as to  whether 
he wants to keep the "crunched" file.







Usage:  UNCR  [d:] <filename> [d:]


where  the  first  "d:"  is an optional  source  drive  spec  for 
<filename>  and the second "d:" is an optional destination  drive 
spec for the resulting uncompressed file. If either "d:" is omit-
ted,  the corresponding input or output will be to the  currently 
logged  drive. The output filename will be automatically  created 
to be the same as the name of the file that was originally  comp-
ressed.  In general (ie assuming the compressed file has not been 
renamed)  this is the same as the input filename with the  middle 
letter  of  the extension converted from "Z"  to  an  appropriate 
character.   If a file with this name already exists, it will  be 
overwritten. Ambiguous filenames ("wildcards") ARE fully  suppor-
ted.  Note  however, that "*.*" will be  converted  to   "*.?Z?".  
This  is a convenience feature to allow quickly  uncrunching  all 
files with the appropriate extension.


   In operation, the uncruncher displays information to the  con-
sole analogous to the cruncher.  In this case the percent  figure 
is  the  "expansion" ratio (still output file size /  input  file 
size).
-------------------------CUT HERE for crunch.uue-----------------
begin 600 CRUNCH.COM
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
7&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH!
 
end
-----------------------CUT HERE for uncr.uue-------------------
begin 600 UNCR.COM
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
7&AH:&AH:&AH:&AH:&AH:&AH:&AH:&AH:
 
end
16-Jul-86 12:16:13-MDT,736;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 16 Jul 86 12:16:06-MDT
Received: from amc-hq.arpa by AMSAA.ARPA id a000308; 16 Jul 86 13:21 EDT
Received: by AMC-HQ via cde1;  16 Jul 86 12:43 EDT
Date:     Wed, 16 Jul 86 12:41:17 EDT
From:     "Richard Stanley A." (LTC) <rstanley%cde-pyramid01.amc@AMC-HQ.ARPA>
To:       info-cpm%amsaa.arpa@AMC-HQ.ARPA, info-micro%amsaa.arpa@AMC-HQ.ARPA
cc:       rstanley%cde-pyramid01.amc@AMC-HQ.ARPA
Subject:  Need an H89

If anyone out there has a used Heath H89 (or Zenith Z90) that they
want to sell reasonably, my wife needs one for classroom use with
disadvantaged students.  Please reply to rstanley@amc-hq.  Thanks.

					...Dick
17-Jul-86 18:57:10-MDT,965;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 17 Jul 86 18:57:04-MDT
Received: from brl-aos.arpa by AMSAA.ARPA id ab00367; 17 Jul 86 20:19 EDT
Received: from mit-eddie.arpa by AOS.BRL.ARPA id a017085; 17 Jul 86 12:55 EDT
Received: from deep-thought.mit.edu by EDDIE (5.31/4.7) id AA00616; Thu, 17 Jul 86 12:25:37 EDT
Date: Thu 17 Jul 86 01:09:08-EDT
From: Andrew Moore <T.MOORE%DEEP-THOUGHT@MIT-EDDIE.ARPA>
Subject: RAMdisk program wanted
To: info-cpm@BRL.ARPA
Cc: info-apple@BRL.ARPA
Message-Id: <12223306707.29.T.MOORE@DEEP-THOUGHT.MIT.EDU>


   I'm trying to locate a program which will let a Saturn 128K RAM card
(for the Apple II+) function as a RAMdisk under CP/M.  If you have any
suggestions where to find this program (I do know that it exists),
please drop me a note.

-drew
 arpa: MOORE%MIT-EECS@MIT-MC.ARPA
 uucp: ...mit-eddie!moore
   us: Box 121, North Quincy, MA  02171
-------
17-Jul-86 22:29:25-MDT,2336;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 17 Jul 86 22:29:16-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a001231; 17 Jul 86 23:44 EDT
Date: Tuesday, 15 July 1986  22:05-MDT
Message-ID: <KPETERSEN.12223553839.BABYL@SIMTEL20.ARPA>
From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
Sender: KPETERSEN@SIMTEL20.ARPA
To: Bernie Eiben - LDP Workstations <EIBEN@dec-marlboro.ARPA>
Subject:   Taking a stand - revisited
ReSent-From: KPETERSEN@SIMTEL20.ARPA
ReSent-To: Info-Cpm@AMSAA.ARPA
ReSent-Date: Thu 17 Jul 1986 21:46-MDT

Bernie, please remove the "Taking a stand" message from your bulletin
board.  The reason I removed that message from my system was because I
was just leaving for my vacation and didn't want to deal with the
controversy at that time.  Bob Freed convinced me that I should not
remove BYE5/KMD - I should let the users of my RCP/M decide for
themselves.  I have therefore restored those files and they, along
with NUBYE/NUKMD, are available on my system.

I have replaced the file -BYE5KMD.NOT with a revised version by the
same name.  It is enclosed below.

--Keith

--cut here--
The BYE5xx and KMDxx files will be available for downloading but will
not be supported by this system.

BYE and KMD were public domain programs which are now copyrighted by
Irv Hoff and Wayne Masters.  We join many other RCP/M SysOps in
protesting the "appropriation" of public domain programs by people
who then modify them and copyright them.  This is not in the true
spirit of RCP/M public domain programming.

For those who don't know, BYE was originally written by Dave
Jaffe.  KMD is a renamed XMODEM, which was originally written
by me, based on Ward Christensen's MODEM2 program.

You are encouraged to download and forward the public domain
replacements for BYE5xx and KMDxx:

  NUBYE100.LBR - public domain version of BYE5
  NUKMD100.LBR - public domain version of KMD
  NU-CLOCK.LBR - clock inserts for NUBYE
  NUBY-SUP.LBR - supplimental library for NUBYE
  NUBY-INS.LBR - port and modem inserts for NUBYE

There are many added features to them.  MOST importantly,
they are now back in the public domain for all of us to
contribute to - and feel good about it.

--Keith Petersen, W8SDZ - Co-Sysop of RCP/M Royal Oak (MI)
18-Jul-86 17:29:43-MDT,1019;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Fri 18 Jul 86 17:29:34-MDT
Received: from amc-hq.arpa by AMSAA.ARPA id a000412; 18 Jul 86 12:59 EDT
Received: by AMC-HQ via cde1;  18 Jul 86 12:48 EDT
Date:     Fri, 18 Jul 86 10:30:57 EDT
From:     "Richard Stanley A." (LTC) <rstanley%cde-pyramid01.amc@AMC-HQ.ARPA>
To:       info-cpm%amsaa.arpa@AMC-HQ.ARPA
cc:       rstanley%cde-pyramid01.amc@AMC-HQ.ARPA
Subject:  H89

This msg for Ed Barton at MIT--sorry everybody else, my mailer won't
build a path back to Ed.

Ed--I'm very interested in the H89 package.  I'm sure we can figure
out how to get it here, even if I pick it up (I have family near 
Boston).

Please send me your phone number so that we can discuss details.  
Basic detail:  what are you asking?
Secondary details:  what kind of printer?  Hard sector disks?

Look forward to hearing from you.

				...Dick Stanley
rstanley@amc-hq
   -or-
jshaffer@isif
telephone:(202)274-9652/5078
19-Jul-86 07:24:59-MDT,673;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 19 Jul 86 07:24:54-MDT
Date:     Sat, 19 Jul 86 8:57:25 EDT
From:     Dave Towson (info-cpm-request) <cpmlist@AMSAA.ARPA>
To:       info-cpm@AMSAA.ARPA
Subject:  Info-cpm mail delivery interruption:

Fellow CP/Mers - In the wee hours of Thursday 17 July, the AMSAA machine from
which this list is distributed became very sick.  Since then, it has been up
and down like a ping pong ball.  Can't say whether it is really fixed yet or
not - time will tell.  Anyway, that's what's been going on.


Dave Towson <info-cpm-request@amsaa.arpa>
info-cpm list maintainer

19-Jul-86 11:21:52-MDT,926;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 19 Jul 86 11:21:41-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id aa00168; 19 Jul 86 12:49 EDT
Received: from USENET by SMOKE.BRL.ARPA id a015409; 19 Jul 86 12:04 EDT
From: seev%techsup.uucp@BRL.ARPA
Newsgroups: net.micro.cpm
Subject: Re: Orphaned Response
Message-ID: <-1771099@techsup>
Date: 16 Jul 86 15:50:00 GMT
Nf-ID: #R:omssw2.UUCP:470:techsup:-1771099:000:357
Nf-From: techsup.UUCP!seev    Jul 16 10:50:00 1986
To:       info-cpm@AMSAA.ARPA


SCO has a rather nice word processor named Lyrix which is quite
malleable... I should think it would be possible (and quite easy)
to rebind the keys to emulate WordStar.  We've been running it
locally for about a year with no problems (on a Xenix system)
and the software is available for everything from Tandy 6000's
to Vaxen.  It is, however, not cheap.
19-Jul-86 15:10:48-MDT,50223;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sat 19 Jul 86 15:09:03-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000168; 19 Jul 86 12:49 EDT
Received: from USENET by SMOKE.BRL.ARPA id a014864; 19 Jul 86 11:48 EDT
From: Michael Kersenbrock <michaelk%copper.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Unix-compatable SHAR for CP/M
Message-ID: <484@copper.UUCP>
Date: 18 Jul 86 05:27:53 GMT
Keywords: shar,unshar,cp/m,c
To:       info-cpm@AMSAA.ARPA


#	This is a shell archive.
#	Remove everything above and including the cut line.
#	Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar:    Shell Archiver
#	Run the following text with /bin/sh to create:
#	READ_ME
#	SHAR.C
#	SHAR.UUE
# This archive created: Thu Jul 17 02:03:12 1986
# By:	Michael D. Kersenbrock (Oregon HomePower Software)
echo shar: extracting read_me
sed 's/^XX//' << \SHAR_EOF > read_me
XX
XX			READ_ME
XX
XXThis program is both a "shar" and a "unshar" program for those
XXof us with no shell.
XX
XXI have ported the recently posted shar.c to (z80) CP/M.  This
XXdistribution has been shar'd with this program.
XX
XXWhen run under CP/M 3.0 with time-of-day supported,
XXshar files created will have archive creation time included.
XX
XXThe uuencoded binary included (shar.com) looks for a file
XX"ENVIRON.DAT" or "A:ENVIRON.DAT" for the environment variables.
XXVariables used are "NAME=" and "ORGANIZATION=".
XX
XXUuencoding of the binary was done with the recently posted
XXturbo-pascal uuencode.com program.
XX
XXThe attached binary was compiled using Manx Aztec C II v1.05g (z80).
XX
XXMike Kersenbrock (usenet:{decvax,ucbvax...}!tektronix!copper!michaelk)
XXAloha, Oregon
XX7/17/86
SHAR_EOF
if test 752 -ne "`wc -c read_me`"
then
echo shar: error transmitting read_me '(should have been 752 characters)'
fi
echo shar: extracting shar.c
sed 's/^XX//' << \SHAR_EOF > shar.c
XX/* 
XX *  Shar puts readable text files together in a package
XX *
XX *  from which they are easy to extract.
XX *
XX *    v 860716 M. Kersenbrock (tektronix!copper!michaelk) for Z80-CPM
XX *	- enhanced usage message
XX *
XX *    v 860712 D. Wecker for ULTRIX and the AMIGA
XX *	- stripped down.. does patterns but no directories
XX *	- added a -u (unshar) switch
XX */
XX
XX#define CPM
XX
XX#ifdef CPM
XX#include "c:stdio.h"
XX#include "c:fcntl.h"
XX#else
XX#include <stdio.h>
XX#endif
XX
XX#ifdef CPM
XX#define void int
XX#define fputc putc
XXextern char *getenv(),*malloc(),*index(),*rindex();
XXint cpmversion;
XX
XX#endif
XX
XX#ifdef	AMIGA
XX#include <exec/types.h>
XXextern char *getenv(),*scdir(),*malloc(),*index();
XX#endif
XX
XX#ifdef	ULTRIX
XX#include <sys/types.h>
XXextern char *getenv(),*scdir(),*malloc(),*index();
XX#endif
XX
XX#ifdef	VMS
XX#include <types.h>
XXextern char *getenv(),*scdir(),*malloc();
XX#endif
XX
XX
XX#define BADCH	((int)'?')
XX#define EMSG	""
XX#define tell(s)	{fputs(*nargv,stderr);fputs((s),stderr);fputc(optopt,stderr);fputc('\n',stderr);return(BADCH);}
XX#define rescanopts()	(optind = 1)
XX
XXint	optind = 1,		/* index into parent argv vector */
XX	optopt;			/* character checked for validity */
XXlong	fsize;			/* length of file */
XXchar	*optarg;		/* argument associated with option */
XXchar	*sav[100];		/* saved file names */
XXint	savind;			/* save index */
XX
XX/* OPTIONS */
XXint 	Verbose = 0;           /* provide append/extract feedback */
XXint 	Basename = 0;          /* extract into basenames */
XXint 	Count = 0;             /* count characters to check transfer */
XXchar	*Delim = "SHAR_EOF";   /* put after each file */
XXchar	Filter[100] = "cat";   /* used to extract archived files */
XXchar	*Prefix = NULL;        /* line prefix to avoid funny chars */
XXint	UnShar = 0;	       /* do we unshar an input file? */
XX
XXchar Usage1[] = 
XX"\nSHAR: Create/extract file archive for extraction by /bin/sh (normally).\n\
XX\n\
XXusage: shar [-u archive] [[-a] [-p prefix]\
XX [-d delim] [-bcv] files > archive]\n\
XX\n\
XX	where:	-a  all the options (v,c,b,-pXX)\n";
XX
XXchar Usage2[] = 
XX"		-b  extract absolute paths into current directory\n\
XX		-c  check filesizes on extraction\n\
XX		-d  use this EOF delimiter instead of SHAR_EOF\n";
XX
XXchar Usage3[] =
XX"		-p  use this as prefix to each line in archived files\n\
XX		-u  unshar <archive>\n\
XX		-v  verbose on extraction, incl. echoing filesizes\n";
XX
XX
XX#define	SED "sed 's/^%s//'"    /* used to remove prefix from lines */
XX
XX#ifdef CPM
XX#define	OPTSTRING "U:AP:D:BCV"
XX#else
XX#define	OPTSTRING "u:ap:d:bcv"
XX#endif
XX
XX#ifdef	VMS
XXchar *index(s,c)
XXchar    *s;
XXchar    c;
XX{
XX    while (*s != 0 && *s != c) s++;
XX    if (*s == 0 && *s != c) s = 0;
XX    return(s);    
XX}
XX#endif
XX
XXint header(ppchFiles)
XXchar *ppchFiles[];
XX{
XX    extern char *ctime();
XX    register int i;
XX    auto long clock;
XX    register char **ppchList;
XX    char *pchOrg;
XX    char *pchName;
XX    register int  problems = 0;
XX
XX    pchOrg = getenv("ORGANIZATION");
XX    pchName = getenv("NAME");
XX
XX    puts("#\tThis is a shell archive.");
XX    puts("#\tRemove everything above and including the cut line.");
XX    puts("#\tThen run the rest of the file through sh.");
XX    puts("#----cut here-----cut here-----cut here-----cut here----#");
XX    puts("#!/bin/sh");
XX    puts("# shar:    Shell Archiver");
XX    puts("#\tRun the following text with /bin/sh to create:");
XX    for (ppchList = ppchFiles; *ppchList; ++ppchList)
XX        printf("#\t%s\n", *ppchList);
XX#ifdef CPM
XX  if (cpmversion >= 0x30) {
XX#endif
XX    (void) time(& clock);
XX    printf("# This archive created: %s", ctime(&clock));
XX#ifdef CPM
XX  }
XX#endif
XX    if (pchName)
XX        printf("# By:\t%s (%s)\n", pchName, 
XX        pchOrg ? pchOrg : "Dave Wecker Midnight Hacks");
XX    return(0);
XX}
XX
XXint archive(input, output)
XXchar *input, *output;
XX{
XX    auto char line[BUFSIZ];
XX    register FILE *ioptr;
XX
XX    if (ioptr = fopen(input, "r")) {
XX        printf("%s << \\%s > %s\n", Filter, Delim, output);
XX        while(fgets(line, BUFSIZ, ioptr)) {
XX            if (Prefix) fputs(Prefix, stdout);
XX            fputs(line, stdout);
XX            if (Count) fsize += strlen(line);
XX        }
XX        puts(Delim);
XX        (void) fclose(ioptr);
XX        return(0);
XX    } 
XX    else {
XX        fprintf(stderr, "shar: Can't open '%s'\n", input);
XX        return(1);
XX    }
XX}
XX
XX
XXvoid shar(file)
XXchar *file;
XX{
XX    register char *basefile;
XX    basefile = file;
XX    if (!strcmp(file, "."))
XX        return;
XX    fsize = 0;
XX    if (Basename) {
XX        while(*basefile)
XX            basefile++;        /* go to end of name */
XX        while(basefile > file && *(basefile-1) != '/')
XX            basefile--;
XX    }
XX    if (Verbose) printf("echo shar: extracting %s\n", basefile);
XX    if (archive(file, basefile)) exit(66);
XX    if (Count) {
XX        printf("if test %ld -ne \"`wc -c %s`\"\n",fsize,basefile);
XX        printf("then\necho shar: error transmitting %s ",basefile);
XX        printf("'(should have been %ld characters)'\nfi\n",fsize);
XX    }
XX}
XX
XXint main(argc, argv)
XXint argc;
XXchar **argv;    
XX{
XX    auto char *ppchFiles[256];
XX    register int  C;
XX    register char **ppchList = ppchFiles;
XX    register int errflg = 0;
XX
XX#ifdef CPM
XX    cpmversion = (bdoshl(0x0c,0) & 0xff);
XX#endif
XX
XX    while(EOF != (C = getopt(argc, argv, OPTSTRING))) {
XX#ifdef CPM
XX        switch(isupper(C) ? tolower(C) : C ) {
XX#else
XX        switch(C) {
XX#endif
XX        case 'v': 
XX            Verbose++; 
XX            break;
XX        case 'c': 
XX            Count++; 
XX            break;
XX        case 'b': 
XX            Basename++; 
XX            break;
XX        case 'd': 
XX            Delim = optarg; 
XX            break;
XX        case 'a': /* all the options */
XX            optarg = "XX";
XX            Verbose++;
XX            Count++;
XX            Basename++;
XX            /* fall through to set prefix */
XX        case 'p': 
XX            (void) sprintf(Filter, SED, Prefix = optarg); 
XX            break;
XX        case 'u':
XX            UnShar++;
XX            dounshar(optarg);
XX            break;
XX        default: 
XX            errflg++;
XX        }
XX    }
XX    if (UnShar) exit(0);
XX
XX    C = getarg(argc, argv);
XX    if (errflg || EOF == C) {
XX        if (EOF == C)
XX            fprintf(stderr, "shar: No input files\n");
XX        fprintf(stderr, "%s%s%s", Usage1, Usage2, Usage3);
XX        exit(1);
XX    }
XX
XX    savind = 0;
XX    do {
XX        if (getpat(optarg)) exit(2);
XX    } 
XX    while (EOF != (C = getarg(argc, argv)));
XX
XX    sav[savind] = 0;
XX    header(sav);
XX    for (ppchList = sav; *ppchList; ++ppchList) {
XX
XX#ifdef CPM
XX	 strlower(*ppchList);
XX#endif
XX
XX	 shar(*ppchList);
XX    }
XX    puts("#\tEnd of shell archive");
XX    puts("exit 0");
XX    exit(0);
XX}
XX
XXgetpat(pattern)
XXchar *pattern;
XX{
XX    register char *ptr;
XX    int temp;
XX
XX#ifdef AMIGA
XX    while (ptr = scdir(pattern)) {
XX#else
XX    ptr = pattern;
XX    {
XX#endif
XX	sav[savind] = malloc(strlen(ptr)+1);
XX	strcpy(sav[savind++],ptr);
XX#ifdef CPM
XX	temp = open(ptr,O_RDONLY);
XX	if (temp == -1) {
XX#else
XX	if (access(ptr,4)) {
XX#endif
XX	    printf("No read access for file: %s\n",ptr);
XX	    return(-1);
XX	}
XX
XX#ifdef CPM
XX	close(temp);
XX#endif
XX    }
XX    return(0);
XX}
XX
XX
XX/*
XX * get option letter from argument vector
XX */
XXint
XXgetopt(nargc, nargv, ostr)
XXint nargc;
XXchar **nargv, *ostr;
XX{
XX    register char    *oli;        /* option letter list index */
XX    static char    *place = EMSG;    /* option letter processing */
XX    if(!*place) {            /* update scanning pointer */
XX        if(optind >= nargc || *(place = nargv[optind]) != '-' || !*++place)
XX		 return(EOF);
XX        if (*place == '-') {    /* found "--" */
XX            ++optind;
XX            return EOF;
XX        }
XX    }                /* option letter okay? */
XX    if ((optopt = (int)*place++) == (int)':' || !(oli = index(ostr,optopt))) {
XX        if(!*place) ++optind;
XX        tell(": illegal option -- ");
XX    }
XX    if (*++oli != ':') {        /* don't need argument */
XX        optarg = NULL;
XX        if (!*place)
XX            ++optind;
XX    } 
XX    else {                /* need an argument */
XX        if (*place) {            /* no white space */
XX            optarg = place;
XX        } 
XX        else {
XX		if (nargc <= ++optind) {    /* no arg */
XX        	        place = EMSG;
XX	                tell(": option requires an argument -- ");
XX                }
XX	        else {
XX	            optarg = nargv[optind];    /* white space */
XX		}
XX        }
XX        place = EMSG;
XX        ++optind;
XX    }
XX    return(optopt);            /* dump back option letter */
XX}
XX
XX
XXint
XXgetarg(nargc, nargv)
XXint nargc;
XXchar **nargv;
XX{
XX    if (nargc <= optind) {
XX        optarg = (char *) 0;
XX        return EOF;
XX    } 
XX    else {
XX        optarg = nargv[optind++];
XX        return 0;
XX    }
XX}
XX
XXdounshar(ArcNam)
XXchar *ArcNam;
XX{
XX    register int i,j;
XX    register FILE *inptr,*outptr;
XX    auto char line[BUFSIZ];
XX    int DirNum = -1;
XX    int Prefix = 0;
XX    char Dirs[5][40],FilNam[128],Delim[40],ScrStr[128];
XX    char *ptr;
XX
XX    if (!(inptr = fopen(ArcNam,"r"))) {
XX        fprintf(stderr,"shar: Can't open archive '%s'\n", ArcNam);
XX        return;
XX    }
XX    while (fgets(line,BUFSIZ,inptr)) {
XX        if (strncmp(line,"sed ",4) == 0) {
XX            Prefix = 0;
XX            if (!(ptr = index(line,'/'))) goto getfil;
XX            if (*++ptr == '^') ++ptr;
XX            while (*ptr++ != '/') Prefix++;
XX            goto getfil;
XX        }
XX        else if (strncmp(line,"cat ",4) == 0) {
XX            Prefix = 0;
XX            ;
XXgetfil:
XX
XX#ifdef    VMS
XX            strcpy(FilNam,"[");
XX#else
XX            FilNam[0] = 0;
XX#endif
XX
XX            for (i = 0; i <= DirNum; i++) {
XX
XX#ifdef    VMS
XX                strcat(FilNam,".");
XX                strcat(FilNam,Dirs[i]);
XX#else
XX                strcat(FilNam,Dirs[i]);
XX                strcat(FilNam,"/");
XX#endif
XX
XX            }
XX
XX
XX#ifdef    VMS
XX            strcat(FilNam,"]");
XX#endif
XX
XX            getshpar(line,">",ScrStr);
XX            strcat(FilNam,ScrStr);
XX
XX#ifdef CPM
XX	    tocpmformat(FilNam);	/* tweek format as needed */
XX#endif
XX            getshpar(line,"<<",Delim);
XX            fprintf(stderr,"Creating %s ...",FilNam);
XX            outptr = fopen(FilNam,"w");
XX            while (fgets(line,BUFSIZ,inptr)) {
XX                if (strncmp(line,Delim,strlen(Delim)) == 0) break;
XX                if (outptr) fputs(&line[Prefix],outptr);
XX            }
XX            if (outptr) {
XX                fclose(outptr);
XX                fprintf(stderr,"...done\n");
XX            }
XX            else fprintf(stderr,"...error in creating file\n");
XX        }
XX        else if (strncmp(line,"mkdir ",6) == 0) {
XX            sprintf(stderr,"Need to make directory: %s\n",&line[6]);
XX        }
XX        else if (strncmp(line,"chdir ",6) == 0) {
XX            if (line[6] == '.' && line[7] == '.') DirNum--;
XX            else strcpy(Dirs[++DirNum],&line[6]);
XX            if (DirNum < -1) DirNum = -1;
XX        }
XX        else if (strncmp(line,"cd ",3) == 0) {
XX            if (line[3] == '.' && line[4] == '.') DirNum--;
XX            else strcpy(Dirs[++DirNum],&line[3]);
XX            if (DirNum < -1) DirNum = -1;
XX        }
XX    }
XX    fclose(inptr);
XX}
XX
XXgetshpar(line,sea,par)
XXchar *line,*sea,*par;
XX{
XX    register int i,j,k;
XX    register char *scr1,*scr2;
XX
XX    while (*line) {
XX        scr1 = line;
XX        scr2 = sea;
XX        while (*scr1 && *scr2 && *scr1 == *scr2) { 
XX            scr1++; 
XX            scr2++; 
XX        }
XX        if (*scr2 == 0) {
XX            if (*scr1 == 0) { 
XX                *par = 0; 
XX                return; 
XX            }
XX            while ( *scr1 == ' ' || *scr1 == '\t' ||
XX                *scr1 == '\\' || *scr1 == '\'' || *scr1 == '"') scr1++;
XX            while ( *scr1 != 0 && *scr1 != ' ' && *scr1 != '\t' &&
XX                *scr1 != '\\' && *scr1 != '\'' && *scr1 != '"' &&
XX                *scr1 != '\n' && *scr1 != '\r') *par++ = *scr1++;
XX            *par = 0;
XX            return;
XX        }
XX        line++;
XX    }
XX    *par = 0;
XX}
XX
XX
XX#ifdef CPM
XX
XXtocpmformat(filename)
XXchar *filename;
XX{
XX	char buffer[100];
XX	char extension[100];
XX	register char *temp;
XX	int mod = 0;
XX
XX	strcpy(buffer,filename);
XX
XX	/* 
XX 	 * Make sure we get rid of any pathnames
XX	 */
XX	if ((temp=rindex(buffer,'/')) != 0) {
XX		strcpy(buffer,(char *)((temp-buffer)+filename+1));
XX		mod = 1;
XX	}
XX
XX	if (strlen(filename) <= 8) {
XX		if (mod != 0) {
XX			strcpy(filename,buffer);
XX		}
XX		return(0);
XX	}
XX
XX	/*
XX	 * If it already is in "CPM" format we'll check if we need
XX	 * to truncate the front filename part.
XX	 */
XX	if ((temp=index(buffer,'.')) != 0 ) {
XX		if ((temp-buffer) < 8) {
XX			if (mod != 0) {
XX				strcpy(filename,buffer);
XX			}
XX			return(0);
XX		}
XX		else {
XX			strcpy(extension,temp);
XX			strcpy(&buffer[8],extension);
XX			buffer[12] = '\0';
XX			strcpy(filename,buffer);
XX			return(1);
XX		}
XX	}
XX			
XX	/*
XX	 * OK, filename is longer than can be handled, and it doesnt have
XX	 * a filetype "." marker already.  We will put one in to minimize
XX	 * truncation.
XX	 */
XX	strcpy(extension,&buffer[8]);
XX	buffer[8] = '.';
XX	strcpy(&buffer[9],extension);
XX	buffer[12] = '\0';
XX	strcpy(filename,buffer);
XX	return(2);
XX}
XX
XX
XX	
XXstrlower(string)
XXchar *string;
XX{
XX	register char *pointer;
XX	char c;
XX	for (pointer = string ; (c=*pointer) != '\0' ; pointer++ ) {
XX		if (isupper(c))
XX			*pointer = tolower(c);
XX	}
XX}
XX
XX#endif
SHAR_EOF
if test 12942 -ne "`wc -c shar.c`"
then
echo shar: error transmitting shar.c '(should have been 12942 characters)'
fi
echo shar: extracting shar.uue
sed 's/^XX//' << \SHAR_EOF > shar.uue
XXbegin 644 SHAR.COM
XXMPT$F4TA!4E]%3T8`S3,5^/\A``#E_>$A`@+ES083T>LA!@`Y<R-R(0\"Y<T&
XXM$]'K(00`.7,C<B$4`N7-0AK1(2\"Y<U"&M$A90+ES4(:T2&1`N7-0AK1(<L"
XXMY<U"&M$AU0+ES4(:T2'O`N7-0AK1(10`.5XC5M7=X<.$`=WEX2,CY=WAW>7A
XXM?B.VRJ`!W6X`W68!Y2$@`^7-.A?1T<-\`2H,5Q$P`.O-D17*R0$A"``YY<W&
XXM1]$A"``YY<T32='E(28#Y<TZ%]'1(00`.7XCMLK^`2$&`#E^([;*Z`$A!@`Y
XXM7B-6Z\/K`2%0`^4A!@`Y7B-6U2%!`^7-.A?1T=$A``#)3U)'04Y)6D%424].
XXM`$Y!344`(PE4:&ES(&ES(&$@<VAE;&P@87)C:&EV92X`(PE296UO=F4@979E
XXM<GET:&EN9R!A8F]V92!A;F0@:6YC;'5D:6YG('1H92!C=70@;&EN92X`(PE4
XXM:&5N(')U;B!T:&4@<F5S="!O9B!T:&4@9FEL92!T:')O=6=H('-H+@`C+2TM
XXM+6-U="!H97)E+2TM+2UC=70@:&5R92TM+2TM8W5T(&AE<F4M+2TM+6-U="!H
XXM97)E+2TM+2,`(R$O8FEN+W-H`",@<VAA<CH@("`@4VAE;&P@07)C:&EV97(`
XXM(PE2=6X@=&AE(&9O;&QO=VEN9R!T97AT('=I=&@@+V)I;B]S:"!T;R!C<F5A
XXM=&4Z`",))7,*`",@5&AI<R!A<F-H:79E(&-R96%T960Z("5S`",@0GDZ"25S
XXM("@E<RD*`$1A=F4@5V5C:V5R($UI9&YI9VAT($AA8VMS`,TS%0#\(3`$Y2$.
XXM!#E>(U;5S9P7T=%$37RURA8$(0X$.5XC5M4JH%;E(:)6Y2$R!.7-.A?K(0@`
XXM.?G%(0`$Y2$(`#GES7$9T='1R@4$*@97?+7*S0,A)%;E*@97Y<V&&M'1(216
XXMY2$&`#GES88:T=$JGE9\M<H"!"%06>4A!@`YY<V10M'-7T?-043AY<WO0\VK
XXM1.'-`D3#I0,JH%;ES4(:T<7-,QW1(0``R2$,!#E>(U;5(4($Y2$O5N7-71?1
XXMT=$A`0#)<@`E<R`\/"!<)7,@/B`E<PH`<VAA<CH@0V%N)W0@;W!E;B`G)7,G
XXM"@#-,Q4``"$,`#E>(U9"2R$U!>4A#@`Y7B-6U<TS0M'1PGP$R2%06>7-Z$,`
XXM````X<T"1"J25GRURLT$8&E^M\JC!&!I(T1-*\.3!&!IZR$,`#E^(V9OS><6
XXMRLT$(?__"5X6`"$O`,V!%<K-!&!I*T1-(\.C!"H.5WRURM\$Q2$W!>7-.A?1
XXMT<4A#@`Y7B-6U<UK`]'1RO@$(4(`Y<V.*M$JGE9\M<HT!<4A4%G-[T/-%40A
XXM407ES3H7ZR$(`#GYQ2%O!>7-.A?1T2%06<WO0\T51"&6!>7-.A?1T=')+@!E
XXM8VAO('-H87(Z(&5X=')A8W1I;F<@)7,*`&EF('1E<W0@)6QD("UN92`B8'=C
XXM("UC("5S8"(*`'1H96X*96-H;R!S:&%R.B!E<G)O<B!T<F%N<VUI='1I;F<@
XXM)7,@`"<H<VAO=6QD(&AA=F4@8F5E;B`E;&0@8VAA<F%C=&5R<RDG"F9I"@#-
XXM,Q4`_B$$`#GEW>$A``#E_>$A``#E(0P`Y<U1)M'1$?\`S2(5(@Q7(=P'Y2$0
XXM`CE>(U;5(1`".5XC5M7-S0C1T=%$3>4A___1S8$5RL8&Q<US0]'*'0;%S<1#
XXMT<,?!F!IPZ`&*@Y7(R(.5RO#PP8JGE8C(IY6*\/#!BJ25B,BDE8KP\,&*J!9
XXM(J!6P\,&(><'(J!9*@Y7(R(.5RLJGE8C(IY6*RJ25B,BDE8K*J!9(@97Y2'J
XXM!^4AHE;ES:\?T='1P\,&*A!7(R(05RLJH%GES>D*T</#!OWEX2/E_>$KP\,&
XXMS;$6!P!V`"(&8P`M!F(`.`9D`$,&80!,!G``:@9U`((&E0;#Y@4J$%=\M<K6
XXM!B$``.7-CBK1(0X".5XC5M4A#@(Y7B-6U<VL"M'11$W]Y>%\M<(`!R'__U!9
XXMS7(5RCT'(?__4%G-<A7*&`<A^`?E(2]6Y<U=%]'1(5]8Y2'55^4A$E?E(0X(
XXMY2$O5N7-71?K(0H`.?DA`0#ES8XJT2$``")L6BJ@6>7-,PC1RE8'(0(`Y<V.
XXM*M$A#@(Y7B-6U2$.`CE>(U;5S:P*T=%$3>4A___1S8$5PD,'(0``Y2IL6BD1
XXMI%D9T7,C<B&D6>7-#`'1(:19Y=WAPZ$'W>7A(R/EW>'=Y>%^([;*PP?=;@#=
XXM9@'ES;T2T=UN`-UF`>7-6031PYD'(14(Y<U"&M$A+`CES4(:T2$``.7-CBK1
XXMR54Z05`Z1#I"0U8`6%@`<V5D("=S+UXE<R\O)P!S:&%R.B!.;R!I;G!U="!F
XXM:6QE<PH`)7,E<R5S`",)16YD(&]F('-H96QL(&%R8VAI=F4`97AI="`P`,TS
XXM%?[_(0X`.5XC5D)+Q<V10M$CY<W@,M'E*FQ:*1&D61G1<R-RQ2IL6B,B;%HK
XXM*1&D61E>(U;5S6Q"T=$A``#EQ<TL-M'1ZR$$`#ES(W(A!``Y7B-6(?__S7(5
XXMRJ`(Q2&P".7-.A?1T2'__\DA!``Y7B-6U<V8-]$A``#)3F\@<F5A9"!A8V-E
XXM<W,@9F]R(&9I;&4Z("5S"@#-,Q4``"H\47ZWPC<)*DY9ZR$,`#E^(V9OS9$5
XXMPAD)*DY9*>LA#@`Y?B-F;QE>(U;K(CQ17A8`(2T`S8$5PAD)*CQ1(R(\47ZW
XXMPAT)(?__R2H\45X6`"$M`,UR%<HW"2I.62,B3EDA___)*CQ1(R(\42M>%@#K
XXM(J)9$3H`S7(5PF<)*J)9Y2$2`#E>(U;5S1-#T=%$37RUPK8)*CQ1?K?"=@DJ
XXM3EDC(DY9(2]6Y2$0`#E>(U;K7B-6U<V&&M'1(2]6Y2%S"N7-AAK1T2$O5N4J
XXMHEGES9P<T=$A+U;E(0H`Y<V<'-'1(3\`R6!I(T1-7A8`(3H`S8$5RM\)(0``
XXM(J!9*CQ1?K?"W`DJ3EDC(DY9PVX**CQ1?K?*\`DJ/%$BH%G#80HJ3EDC(DY9
XXMY2$.`#E>(U;AS9(5RDP*(8@*(CQ1(2]6Y2$0`#E>(U;K7B-6U<V&&M'1(2]6
XXMY2&)"N7-AAK1T2$O5N4JHEGES9P<T=$A+U;E(0H`Y<V<'-'1(3\`R2I.62GK
XXM(0X`.7XC9F\97B-6ZR*@62&K"B(\42I.62,B3EDJHEG)`#H@:6QL96=A;"!O
XXM<'1I;VX@+2T@```Z(&]P=&EO;B!R97%U:7)E<R!A;B!A<F=U;65N="`M+2``
XXM`,TS%0``(0P`.5XC5BI.6<V2%<K+"B$``"*@62'__\DJ3EDC(DY9*RGK(0X`
XXM.7XC9F\97B-6ZR*@62$``,G-,Q4(^B'__^LA^`$Y<R-R(0``ZR'V`3ES(W(A
XXMG`[E(08&.5XC5M7-G!?1T>7]X7RUPC0+(00&.5XC5M4AG@[E(2]6Y<U=%]'1
XXMT<G]Y2$`!.4A_@$YY<UQ&='1T<J5#B$$`.4AO0[E(?X!.>7-JD+1T='"XPLA
XXM``#K(?8!.7,C<B$O`.4A_`$YY<T30]'1ZR$$`#ES(W)ZL\H$#"$$`#GE?B-F
XXM;R/KX7,C<NM>%@`A7@#-<A7*KPLA!``YY7XC9F\CZ^%S(W(A!``YY7XC9F\C
XXMZ^%S(W+K*UX6`"$O`,V!%<K@"R'V`3GE?B-F;R/KX7,C<NLKPZ\+PP0,(00`
XXMY2'"#N4A_@$YY<VJ0M'1T<)-#2$``.LA]@$Y<R-R(0``ZR&N`#ES(0``1$W#
XXM&PQ@:2-$32M@:>LA^`$Y?B-F;\V2%<I6#&!I$2@`S2H6ZR$N`3D9Y2&P`#GE
XXMS=="T=$AQP[E(;``.>7-UT+1T<,5#"$&`#GE(<D.Y2'^`3GES3(/T='1(08`
XXM.>4AL``YY<W70M'1(:X`.>7-71'1(88`.>4ARP[E(?X!.>7-,@_1T=$AK@`Y
XXMY2'.#N4A+U;ES5T7T='1(=X.Y2&P`#GES9P7T='K(?H%.7,C<OWE(0`$Y2'^
XXM`3GES7$9T='1RA<-(88`.>7-D4+1Y2&(`#GE(?X!.>7-JD+1T='*%PTA^@4Y
XXM?B.VRA0-(?H%.5XC5M4A^`$Y7B-6(?P!.1GES88:T='#OPPA^@4Y?B.VRCT-
XXM(?H%.5XC5M7-,QW1(>`.Y2$O5N7-71?1T<-*#2'I#N4A+U;ES5T7T='#D@XA
XXM!@#E(00/Y2'^`3GES:I"T='1PGD-(0`".>4A"P_E(2]6Y<VO']'1T<.2#B$&
XXM`.4A)P_E(?X!.>7-JD+1T='"!PXA``(Y7A8`(2X`S7(5RL,-(0$".5X6`"$N
XXM`,UR%<K##2'X`3GE?B-F;ROKX7,C<NLCP^D-(0`".>4A^@$YY7XC9F\CZ^%S
XXM(W(A*`#-*A;K(3`!.1GES6Q"T=$A^`$Y7B-6(?__S:P5R@0.(?__ZR'X`3ES
XXM(W+#D@XA`P#E(2X/Y2'^`3GES:I"T='1PI(.(?T!.5X6`"$N`,UR%<I1#B'^
XXM`3E>%@`A+@#-<A7*40XA^`$YY7XC9F\KZ^%S(W+K(\-W#B']`3GE(?H!.>5^
XXM(V9O(^OA<R-R(2@`S2H6ZR$P`3D9Y<UL0M'1(?@!.5XC5B'__\VL%<J2#B'_
XXM_^LA^`$Y<R-RPS0+_>7-,QW1R7(`<VAA<CH@0V%N)W0@;W!E;B!A<F-H:79E
XXM("<E<R<*`'-E9"``8V%T(``O`#X`/#P`0W)E871I;F<@)7,@+BXN`'<`+BXN
XXM9&]N90H`+BXN97)R;W(@:6X@8W)E871I;F<@9FEL90H`;6MD:7(@`$YE960@
XXM=&\@;6%K92!D:7)E8W1O<GDZ("5S"@!C:&1I<B``8V0@`,TS%?S_(1``.5XC
XXM5NM^M\I.$2$0`#E>(U8A!@`Y<R-R(1(`.5XC5B$$`#ES(W(A!@`Y7B-6ZWZW
XXMRKT/(00`.5XC5NM^M\J]#R$$`#E>(U;K7A8`U2$(`#E>(U;K7A8`X<UR%<J]
XXM#R$&`#GE?B-F;R/KX7,C<NLK(00`.>5^(V9O(^OA<R-RZRO#8`\A!``Y7B-6
XXMZUX6`'JSPCH1(08`.5XC5NM>%@!ZL\+L#R$``.4A%@`Y7B-6Z]%SR2$&`#E>
XXM(U;K7A8`(2``S7(5PE`0(08`.5XC5NM>%@`A"0#-<A7"4!`A!@`Y7B-6ZUX6
XXM`"%<`,UR%<)0$"$&`#E>(U;K7A8`(2<`S7(5PE`0(08`.5XC5NM>%@`A(@#-
XXM<A7*9!`A!@`YY7XC9F\CZ^%S(W+K*\/L#R$&`#E>(U;K7A8`>K/**Q$A!@`Y
XXM7B-6ZUX6`"$@`,V!%<HK$2$&`#E>(U;K7A8`(0D`S8$5RBL1(08`.5XC5NM>
XXM%@`A7`#-@17**Q$A!@`Y7B-6ZUX6`"$G`,V!%<HK$2$&`#E>(U;K7A8`(2(`
XXMS8$5RBL1(08`.5XC5NM>%@`A"@#-@17**Q$A!@`Y7B-6ZUX6`"$-`,V!%<HK
XXM$2$&`#GE?B-F;R/KX7,C<NLK7A8`U2$6`#GE?B-F;R/KX7,C<NLKT7/#9!`A
XXM``#E(18`.5XC5NO1<\DA$``YY7XC9F\CZ^%S(W+K*\,W#R$``.4A%@`Y7B-6
XXMZ]%SR<TS%3;_(0``ZR$$`#ES(W(AU@`Y7B-6U2%L`#GES6Q"T=$A+P#E(6P`
XXM.>7--4/1T41-?+7*OQ%@:>LA:@`YS886ZR'6`#E^(V9O&2/E(6P`.>7-;$+1
XXMT2$!`.LA!``Y<R-R(=8`.5XC5M7-D4+1$0@`Z\V2%<KU$2$$`#E^([;*\1$A
XXM:@`YY2'8`#E>(U;5S6Q"T=$A``#)(2X`Y2%L`#GES1-#T=%$37RURG<28&GK
XXM(6H`.<V&%A$(`.O-K!7*/A(A!``Y?B.VRCH2(6H`.>4AV``Y7B-6U<UL0M'1
XXM(0``R<4A"``YY<UL0M'1(08`.>4A=``YY<UL0M'1(0``ZR%V`#ES(6H`.>4A
XXMV``Y7B-6U<UL0M'1(0$`R2%R`#GE(0@`.>7-;$+1T2$N`.LA<@`Y<R$&`#GE
XXM(74`.>7-;$+1T2$``.LA=@`Y<R%J`#GE(=@`.5XC5M7-;$+1T2$"`,G-,Q7_
XXM_R$-`#E>(U9"2\/4$F!I(T1-*V!I7A8`(00`.7-ZL\H%$R$$`#E>%@#5S7-#
XXMT<H"$R$$`#E>%@#5S<1#T>M@:7/#SA+)S3,5K/<A8`@Y7B-6U<V10M$13P#K
XXMS:T5RB43(0``R2$.%>4A`A7ES9P7T='K(00`.7,C<GJSPET3(1X5Y2$0%>7-
XXMG!?1T>LA!``Y<R-R>K/"71,A``#)(6`(.5XC5M4A"@@YY<UL0M'1(2`5Y2$*
XXM"#GES=="T=$A"`0Y1$TA``#K8&ES(00`.5XC5M7-^AG1ZR$&`#ES(W(A___-
XXM@17*RA,A!@`Y7B-6(0H`S8$5RLH3(08`.5XC5M5@:2-$32O1<\.*$R$``.M@
XXM:7-@:>LA"`0YS7(5RO(3(08`.5XC5B'__\UR%<KR$R$``,DA"`@YY<V10M'E
XXM(0H$.>4A#`@YY<VJ0M'1T<(2%,,5%,-]$R$("#GES9%"T>LA"`0Y&41-Q2$*
XXM`#GES6Q"T=$A"`0Y1$TA``#K8&ES(00`.5XC5M7-^AG1ZR$&`#ES(W(A___-
XXM@17*?A0A!@`Y7B-6(0H`S8$5RGX4(08`.5XC5M5@:2-$32O1<\,^%"$``.M@
XXM:7,A"`0Y7A8`U<U<0]'*V!0A"`0YY<V10M'*V!0A"``YY<V10M'E(0H$.>7-
XXMD4+1T1D1``3KS:P5RM$4(0@$.>4A"@`YY<W70M'1P]44(0``R</;%,/>%,,Q
XXM%"$(`#GES9%"T2/ES6,ST41->+'*_Q0A"``YY<7-;$+1T6!IR45.5DE23TXN
XXM1$%4`'(`03I%3E9)4D].+D1!5`!R`#T`?*)G?:-OM,E\+V=]+V^TR>GAW>7]
XXMY<5>(U8C1$TA```YZSGYU6!IS3(5Z^'YP?WAW>'K?+7)>JPR/U'-UQ7K.C]1
XXMM_I"%GVTR<WP%>M]M,E]D\)\%7R2RHL5(0``K\E]D\*+%7R2RGP5(0$`?;3)
XXMZWRJ^J05?9-\FC\^`,X`;R8`R7H'Y@%O)@#)ZWRJ^KX5?9-\FCX`S@!O)@#)
XXM?`?F`6\F`,EZ,C]1S=<5.C]1M_I"%GRUR7RW\N(5+V=]+V\C>K?R\!4O5WLO
XXM7Q/#\!7%1$TA```^$#(^42GK*>O2`Q8C?9%O?)AGTAL6"3H^43TR/E'"^Q7!
XXM?;3)$SH^43TR/E'"^Q7!?;3)Q41-(0``/A`IZRGKTCH6"3W",A;!?;3)?2]O
XXM?"]G(WVTR7RURHL5PWP5?+)G?;-OM,GK>^8?7\J#%GRT\OL6?#<?9WT?;QW"
XXM:1:TR>M[YA]?RH,6*1W"?A9]M,GK?9-O?)IGM<GKX<5.(T8CZPGK3B-&(WJX
XXMVJ<6>[G2JQ8C(QD97B-6Z\'IZ^'%0DM>(U8;>K?ZT18C>;[*RQ8C(R/#N18C
XXM>+["QA8C?B-F;\'IZWV3?)H^`#_.`&\F`,GK?9-\FCX`S@!O)@#)ZWOF'U_*
XXM@Q9\MQ]G?1]O'<+[%K3)?*IG?:MOM,GML,G1(0(`.=WE_>7%U1%`408&?A(C
XXM$P7"(Q<A,!?CZ<']X=WA?+7)-\G-,Q4``"$D5B)&42$.`#GE(0X`.5XC5M4A
XXMA1?ES?X?T='1R<TS%0``(0P`.5XC5NLB1E$A$``YY2$0`#E>(U;5(847Y<W^
XXM']'1T<G-,Q4``"I&4>4A#@`Y7B-6U<W$&M'1R<TS%0``(1E61$U@:1$&`!E^
XXMM\K*%V!I$0L`&41-$9)6Z\W8%LK'%R$``,G#IA<A#@`Y7B-6ZR->%@`A*P#-
XXM<A7EW>$A#@`Y7B-6ZUX6`.O#PAC=Y>%\M<K\%R$"`,/_%R$``.4A#@`Y7B-6
XXMU<TL-M'1ZR$'``ES(?__S7(5RB`8(0``R</5&-WEX7RURC$8(0(`PS08(0$`
XXM$0`#S506Y2$.`#E>(U;5S2PVT='K(0<`"7,A___-<A7*6Q@A``#)P]48W>7A
XXM?+7*;!@A`@##;Q@A`0`1``'-5!;E(0X`.5XC5M7-+#;1T>LA!P`)<R'__\UR
XXM%<J6&"$``,DA`@#ES>A#`````,T51"$'``E>%@#5S;4_ZR$(`#GYP]48(?K_
XXM(I99(0``R<VQ%@,`<@#N%W<`(QAA`%X8N!@A`0#K(08`"7,A``3K(0D`"7,C
XXM<B$``.M@:7,C<B$"``ES(W(A!``)<R-R8&G)S3,5```A#``Y7B-60DLA&5;E
XXMS?H9T>7=X1'__\V!%<I`&=WEX1$*`,V!%<I`&=WEX>5@:2-$32O1<\,1&2$`
XXM`.M@:7/=Y>$1___-<A7*:!E@:>LA#``Y?B-F;\UR%<IH&2$``,DA#``Y7B-6
XXMZ\G-,Q4``"$,`#E>(U;5W>$A#@`YY7XC9F\KZ^%S(W(A``#-K17*RADA$``Y
XXM7B-6U<WZ&=%$31'__\V!%<K*&6!IY=WEX2/EW>$KT7-@:1$*`,UR%<+*&<.`
XXM&2$``-UU`&!I$?__S7(5RO$9W>7AZR$,`#E^(V9OS7(5RO$9(0``R2$,`#E>
XXM(U;KR<TS%0``(0P`.4XC1L7-6!O1$7\`S2(5Y=WAPRL:8&GE?B-F;ROKX7,C
XXM<B'__\G#!AK-L18#`!H`%QH-`"@:```H&CX:W>7AR<TS%0``(0P`.4XC1F!I
XXM?K?*>!HA)%;E8&DC1$TK7A8`U<W$&M'1$?__S7(5RG4:(?__R<-.&B$D5N4A
XXM"@#ES<0:T=')S3,5```A#``Y3B-&8&E^M\K`&B$.`#E>(U;58&DC1$TK7A8`
XXMU<W$&M'1$?__S7(5RKT:(?__R<.2&B$``,G-,Q4``"$,`#E.(T8A#@`Y7B-6
XXMU=WA(7\`4%G-(A5$36!I$0H`S7(5R@<;W>4A#0#ES9P<T=$1___-<A7*!QLA
XXM___)W>7%S9P<T=')S3,5```A#``Y7B-6U<U8&]%$31'__\UR%<)$&R$,`#E>
XXM(U;5S5@;T>7=X1'__\UR%<I(&R'__\G=Y>$1"`#KS7864%G-5!;)S3,5```A
XXM#``Y3B-&(0(`"5XC5M5@:5XC5N'-V!;*'!PA!@`)7A8`(0@`S2(5RHP;(?__
XXMR2'[_^5@:1$&`!G1Y6XF`,TB%>OA<V!I$00`&7XCML*R&\7-&1_1(0D`"5XC
XXM5M4A!``)7B-6U2$'``E>%@#5S:<YT='1Y=WA$0``Z\V2%<H$'-WEX7RUPNL;
XXM(0@`P^X;(1``Y6!I$08`&='E;B8`S506Z^%S(?__R2$$``E>(U9@:7,C<MWE
XXMX1GK(0(`"7,C<F!IY7XC9F\CZ^%S(W+K*UX6`"'_`,TB%<G-,Q4``"$O5N4A
XXM#@`Y7B-6U<V<'-'1R<TS%0``(0P`.4XC1B$.`#E>(U;5Q<V<'-'1$0``Z\VL
XXM%<IT'"'__\DA#@`Y7B-6U6!I$0@`Z\WS%N7-G!S1T1$``.O-K!7*F1PA___)
XXM8&G)S3,5```A#@`Y3B-&(0(`"5XC5M5@:5XC5N'-V!;*T1PA#``Y7B-6(?\`
XXMS2(5Y<7-TAW1T<DA#``Y7B-6U6!IY7XC9F\CZ^%S(W+K*]%S(?\`S2(5R<TS
XXM%0``(?__Y2$.`#E>(U;5S=(=T=')S3,5```A&59$36!I$9)6Z\WF%LHR'6!I
XXM$0L`&41-$?7_&>7-,QW1PQ(=R<TS%?[_(0X`.4XC1B$``.LA!``Y<R-R8&D1
XXM!@`9?K?*P!TA!@`)7A8`(00`S2(5RG<=(?__Y<7-TAW1T>LA!``Y<R-R(0<`
XXM"5X6`-7-F#?1ZR$$`#GE?B-F;\U4%NOA<R-R(08`"5X6`"$"`,TB%<K`'2J<
XXM5N4A!``)7B-6Z]%S(W(A!``)7B-6ZR*<5B$``.LA!@`)<R$$`#E>(U;KR<TS
XXM%0``(0P`.4XC1B$&``E>%@`A!`#-(A7*/!XA!``)7B-6U6!I7B-6X<V&%N7=
XXMX=WE(00`"5XC5M4A!P`)7A8`U<WC/-'1T1'__\UR%<H\'B$0`.5@:1$&`!G1
XXMY6XF`,U4%NOA<R'__\DA#@`Y7B-6(?__S7(5RG4>(?O_Y6!I$08`&='E;B8`
XXMS2(5Z^%S(0``ZV!I<R-R(0(`"7,C<B$``,E@:1$$`!E^([;"AA[%S1D?T2$)
XXM``E>(U8A`0#-<A7*OQXA`0#E(1``.>4A!P`)7A8`U<WC/-'1T1'__\UR%<(C
XXM'B$.`#E>(U;KR2$$``E>(U9@:7,C<B$)``E>(U;5(00`"5XC5N$9ZR$"``ES
XXM(W(A!`#E8&D1!@`9T>5N)@#-5!;KX7,A#@`Y7B-6U6!IY7XC9F\CZ^%S(W+K
XXM*]%S(?\`S2(5R<TS%?[_(0X`.4XC1B$)``E>(U8A`0#-<A7*1!]@:1$(`!GK
XXM(00`"7,C<LDJG%9\M<ID'RJ<5NLA!``Y<R-R*IQ67B-6ZR*<5L.+'R$)``E>
XXM(U;5S6,ST>LA!``Y<R-R>K/"BQ\A`0#K(0D`"7,C<L,U'R$"`.5@:1$&`!G1
XXMY6XF`,U4%NOA<R$$`#E>(U8A!``)<R-RR<TS%0``(0P`.5XC5NLB2%$A$``Y
XXMY2$0`#E>(U;5(>`?Y<W^']'1T2$``.4J2%'1<\G-,Q4``"$,`#E>(U;5*DA1
XXM(R)(42O1<R'_`,TB%<G-,Q6^_R%.`#E.(T8A4``Y7B-6U=WAW>7A(^7=X2M>
XXM%@#5_>%ZL\H0)?WEX1$E`,UR%<H%)2$``.LA&@`Y<R$!`.LA1``Y<R-R(2``
XXMZR%"`#ES(W(A_W_K(4``.7,C<MUN`"8`Y?WA$2T`S7(5RH<@(0``ZR%$`#ES
XXM(W+=Y>$CY=WA*UX6`-7]X?WEX1$P`,UR%<J>("$P`.LA0@`Y<R-R(0``ZR$^
XXM`#ES(W+=Y>$CY=WA*UX6`-7]X2$P`,V1%<KM(/WEX1$Y`.O-DA7*[2`A/@`Y
XXM7B-6(0H`S2H6_>71&1'0_QGK(3X`.7,C<L.I(/WEX1$N`,UR%<I((2$``.LA
XXM0``Y<R-RW>7A(^7=X2M>%@#5_>$A,`#-D17*2"']Y>$1.0#KS9(5RD@A(4``
XXM.5XC5B$*`,TJ%OWET1D1T/\9ZR%``#ES(W+#!"']Y>$1;`#-<A7*B"'=Y>$C
XXMY=WA*UX6`-7]X2$Z`#GE(50`.>5^(V9O$00`&>OA<R-RZQ'\_QG-[T/AS0)$
XXMPR<B_>7A$60`S7(5RKHA(3H`.>4A5``YY7XC9F\C(^OA<R-RZRLK7B-6Z\U?
XXM1^'-`D3#)R+]Y>$190#-<A7"WB']Y>$19@#-<A7"WB']Y>$19P#-<A7*!"(A
XXM!``YY2%4`#GE?B-F;Q$(`!GKX7,C<NL1^/\9S7I'X<UZ1\,G(B$Z`#GE(50`
XXM.>5^(V9O(R/KX7,C<NLK*UXC5NO-44?AS0)$_>7AP]$C(1H`.>4A"`#E(3X`
XXM.<WO0\T51,US)>LA"``Y^2$T`#ES(W+#^",A.@`YS>]#S=I#`````,TG1\JF
XXM(B$:`#GE(0H`Y2$^`#G-[T/-4$3-%43-$27K(0@`.?DA-``Y<R-R(2T`Y2$V
XXM`#GE?B-F;ROKX7,C<NO1<\/)(B$:`#GE(0H`Y2$^`#G-[T/-%43-$27K(0@`
XXM.?DA-``Y<R-RP_@C(1H`.>4A"@#E(3X`.<WO0\T51,US)>LA"``Y^2$T`#ES
XXM(W+#^",A&@`YY2$0`.4A/@`YS>]#S15$S7,EZR$(`#GY(30`.7,C<L/X(R$Z
XXM`#G-[T/-<D?K(30`.7,C<M7-D4+1ZR$X`#ES(W+#$"3]Y>$190#-<A7*3",A
XXM``##3R,A`0#E(4(`.5XC5B'_?\UR%<IF(R$&`,-N(R%"`#E>(U;KY2$0`#GE
XXM(0H`.<UZ1\UZ1\UZ1^LA#@`Y^2$,`#GK(30`.7,C<M7-D4+1ZR$X`#ES(W(A
XXMR`#K(4``.7,C<L,0)"$Z`#G-[T/-<D?E_>']Y>'E(1L`.>LA-@`Y<R-RZ]%S
XXMP_@CS;$6"`!O`"TB9`!3(G4`S")X`/(B<P`8(V4`.B-F`#HC8P"N([LC(1H`
XXM.>LA-``Y?B-F;\V&%NLA.``Y<R-R(3@`.5XC5B%``#E^(V9OS:T5RC,D(4``
XXM.5XC5B$X`#ES(W(A1``Y?B.VRFXD(3X`.>5^(V9O*^OA<R-RZR/K(3@`.7XC
XXM9F_-K17*;B0A0@`Y7B-6U6!IS3(5T<,])"$``.LA-@`Y<R-RPXLD(38`.>5^
XXM(V9O(^OA<R-R(30`.5XC5NM^M\K+)"$V`#E>(U8A0``Y?B-F;\VL%<K+)"$T
XXM`#GE?B-F;R/KX7,C<NLK7A8`U6!IS3(5T<-\)"%$`#E^([;"`B4A/@`YY7XC
XXM9F\KZ^%S(W+K(^LA.``Y?B-F;\VM%<H")2$@`.5@:<TR%='#U23##27]Y6!I
XXMS3(5T<,4(,G-,Q4``"$0`#E.(T8A$@`Y7B-6U=WA8&G-7T?-%40A$``YS>]#
XXMS2U$S=5%S7)'$4I1&5X6`-7=Y>$KY=WAT7,A#``YY6!IS5]'S4%$X>7-[T/-
XXMFT7AS0)$S6!$PB<EW>7AR<TS%0``(1``.4XC1B$2`#E>(U;5W>$A#``YS>]#
XXMS=I#`````,TG1\HI)B$,`#G-[T/-<D<1`0#-(A7E_>$A#``YY2$.`#G-[T/-
XXMVD,!````S5)%S=I#____?\W71.'-`D1@:1$!`.O-7!;-7T?-%40A$``YS>]#
XXMS2U$S=5%S7)'*?WET1D12E$97A8`U=WEX2OEW>'1<R$,`#GE8&D1`0#KS5P6
XXMS5]'S4%$X>7-[T/-FT7AS0)$W>7%(1``.<WO0\T51,T1)>LA"``Y^>O)*@8`
XXM^<T^)P$``,T%`,-()LT3%\U<)NO)S1,7*D!11$TJ0E'KS04`ZV\F`,G-$Q?-
XXM>B9O)@#)S1,7*D!1ZRH!`"LK*QD9&>LJ0E%$32I$4>OIQ2$$`#E.(T8C7B-6
XXM:V(V`",^"S8@(SW"I28^!#8`(SW"KB;K`PK^.@L^`,+A)@KF?_Y!VALG_EO2
XXMTB;60,/>)OYAVALG_GO2&R?68'<#`R,>"!P*`_XNROPFM\H5)QW*Y";-(B=W
XXM(\/E)AU[A6]\S@!G'@,*`[?*%2?-(B=W(QW"!B<A``"OP<DA__]\M\')_F'8
XXM_GO0UB#))%!)4$4N24X`)%!)4$4N3U54`,TS%0``(7\`Y2&!`.4A6U+ES?=!
XXMT='1(0``Y3J``&\F`!%_`,TB%1%;4AG1<R$``'TR@``A9RHB6U$A6U+EW>$A
XXM`0`BVU(JVU(1@`#KS:P5RE0JW6X`)@`1(`#-<A7"K2?=;@`F`!$)`,UR%<JW
XXM)]WEX2/EW>'#D2?=;@`F`'RUPL0GPU0JW6X`)@`1?`#-<A7*\"<A`0`BW5+=
XXMY>$CY=WA(M]2*@I7Y?WA(0$`1$W#N2C=;@`F`!$^`,UR%<H&*"$!`$1-PQDH
XXMW6X`)@`1/`#-<A7*0"DA``!$3=WEX2/EW>%>%@`A(`#-<A7".BC=;@`F`!$)
XXM`,UR%<H]*,,9*-WEX>7]X=WEX2/EW>%^M\I_*-UN`"8`$2``S7(5PFLHW6X`
XXM)@`1"0#-<A7*?"@A``#EW>7A(^7=X2O1<\-_*,-#*'BQPKDH_>7-23+1RKDH
XXM(0$`Y2K;4BD16U$9Y?WES?`NT='1$0$`S7(5RKDH*MM2*1%;41E>(U;5_>'%
XXMS9@WT7BQROPH(;8!Y?WES0PVT=%$36!I*2DI$?18&5XC5B%[.<UR%<KY*"$`
XXM!.5@:1$+`,TJ%A$B5AG1<R-RPPDI(0``Y?WES2PVT=%$36!I$?__S7(5RC(I
XXM(6@JY<V@+-']Y<V@+-$ABRKES:`LT2$*`.7-CBK1*MU2?+7*/2G#5"K#42K=
XXM;@`F`!$B`,UR%<JC*=WEX2/EW>'E*MM2(R+;4BLI$5M1&=%S(W+=Y>%^M\J(
XXM*=UN`"8`$2(`S8$5RH@IW>7A(^7=X2O#9RG=;@`F`'RURJ`I(0``Y=WEX2/E
XXMW>$KT7/#42K=;@`F`!$R`,UR%<K/*=UN`28`$3X`S7(5RL\IW>7A(^7=X2LA
XXM`@!$3<,9*-WES4DRT<H`*B&``.LJVU+-AA8KY2K;4BD16U$9Y=WES?`NT='1
XXMZRK;4ADBVU+#%2K=Y>'E*MM2(R+;4BLI$5M1&=%S(W+=Y>$CY=WA?K?*42K=
XXM;@`F`!$@`,UR%<(]*MUN`"8`$0D`S7(5RDXJ(0``Y=WEX2/EW>$KT7/#42K#
XXM%2K#A"<A6U'E*MM2Y<V^!='1Y<V.*M')`$-A;B=T(&]P96X@9FEL92!F;W(@
XXM<F5D:7)E8W1I;VXZ(#P`/@H`S3,5``#-"!TJ"%?ES=%!T2$,`#E^([;*L"HA
XXM>"OES=%!T2K=4GRURG0K*@A7Y2H*5^7->4'1T2K?4EX6`"$@`,UR%<+C*BK?
XXM4EX6`"$)`,UR%<KN*BK?4B,BWU(KP\4J*M]21$U@:7ZWRA\K8&E>%@`A(`#-
XXM@17*'RM@:5X6`"$)`,V!%<H?*V!I(T1-*\/S*F!I?K?*,BLA``#E8&DC1$TK
XXMT7,A``#EQ2H(5^4A@BOE*M]2Y<V_*^LA"@`Y^2&$*^7-H"S1*M]2Y<V@+-$A
XXMJ"OES:`LT2&M*^7-T4'1(;<KY<W10='-2";)03HD)"0N4U5"`#P`0V]U;&1N
XXM)W0@;W!E;B!F:6QE(&%T(&5N9"!O9B!P:7!E.B``+D-/30!!.B0D)"Y354(`
XXM)"0D+E-50@#-,Q4``"$,`#E>(U;5(8``Y<UL0M'1(9LLY2&``.7-UT+1T2%<
XXM`.4A@`#ES>PLT=$A7`#E(0\`Y<U9)M'1$?\`S2(5$?\`S7(5R@\L(0``R2&!
XXM`.7=X2$.`#GE_>'#*2S]Y>$C(^7]X2LK_>7A?B.VRH8LW>7A$<\`Z\WF%LJ&
XXM+/UN`/UF`41-PUXL8&DC1$TK7A8`U=WEX2/EW>$KT7-@:7ZWRG4LW>7A$<\`
XXMZ\WF%LIU+,-*+"$@`.7=Y>$CY=WA*]%SPQ\L(0``W74`W>7A$8#_&7TR@`#-
XXMPS+)+D-/30#-,Q4``"$,`#E>(U;K?K?*TRPA#``YY7XC9F\CZ^%S(W+K*UX6
XXM`-4A`@#ES5DFT='#I2S)S3,5```A_?\BEEDA___)S3,5```A``#)S3,5```A
XXM)`#EW>$A#@`Y7B-60DO##RTA``#E8&DC1$TKT7/=Y>$KY=WA$0``Z\V1%<HC
XXM+<,#+2$,`#E>(U;K?K?*=RTA#``Y7B-6ZR->%@`A.@#-<A7*=RTA#``Y7B-6
XXMZUX6`-7-KD/1$<#_&>4A$``Y7B-6Z]%S(0(`ZR$,`#GE?B-F;QGKX7,C<B$,
XXM`#E>(U;5(1``.5XC5M7-C2W1T<G-,Q7__R$-`#GE?B-F;R/KX7,C<D)+(0L`
XXMZR$$`#ES(00`.>5N)@`KZ^%S(0``S9$5RN,M(0\`.5XC5NM^M\K4+2$@`,/7
XXM+2$_`.5@:2-$32O1<\.L+2$-`#E>(U8A"``91$TA#0`Y7B-6(0H`&>7=X2$/
XXM`#E>(U;K?K?*[RXA#P`Y7B-6ZUX6`"$@`,V!%<KO+B$/`#E>(U;K7A8`(2H`
XXMS7(5RILN(0T`.5XC5F!IS>86RFXN(0T`.5XC5F!IS>86RFLN(3\`Y2$/`#GE
XXM?B-F;R/KX7,C<NLKT7/#0B[#F"XA#0`Y7B-6W>7AS=D6RI@N(3\`Y2$/`#GE
XXM?B-F;R/KX7,C<NLKT7/#;B[#VRXA#P`Y7B-6ZUX6`"$N`,UR%<J\+F!IZR$-
XXM`#ES(W+#VRXA#P`Y7B-6ZUX6`-4A#P`YY7XC9F\CZ^%S(W+K*]%S(0\`.>5^
XXM(V9O(^OA<R-RZRO#_BW)S3,5^O\A``#K(00`.7,C<B$2`#E>(U8A!@`Y<R-R
XXM(5P`Y2$4`#E>(U;5S>PLT=$A7`#E(1$`Y<U9)M'1$?\`S2(5ZR$(`#ES(W(A
XXM_P#-@17*HC`A#P#ES6,ST>LA$@`Y<R-R0DMZL\)J+R&3,>7-H"S1(0$`Y<V.
XXM*M$A"``Y7B-6ZRDI*2DI$8$`&>7=X2$&`#E>(U;K(UX6`"$Z`,UR%<JS+R$&
XXM`#E>(U;K7A8`U6!I(T1-*]%S(3H`Y6!I(T1-*]%S(0$`Y?WAP\0O_>7A(^7]
XXMX2O]Y>$1"P#KS9(5RC,PW6X`)@`1?P#-(A41(`#-@17*_"_=Y>$CY=WA*UX6
XXM`-5@:2-$32O1<\,$,-WEX2/EW>$K_>7A$0@`S7(5RC`PW6X`)@`1?P#-(A41
XXM(`#-<A7",S`A+@#E8&DC1$TKT7/#O"\A``#K8&ES(1(`.5XC5M4A!@`YY7XC
XXM9F\CZ^%S(W+K*RGK(18`.7XC9F\9T7,C<B%<`.4A$@#ES5DFT=$1_P#-(A7K
XXM(0@`.7,C<B$(`#E>(U8A_P#-@17*HC`A!``Y7B-6(18`.7XC9F_-K!7"0R\A
XXM``#K(0@`.7,C<L/!,"$(`#GE?B-F;R/KX7,C<NLK(0@`.5XC5B$$`#E^(V9O
XXMS>86RHHQ(0@`.5XC5M7]X</K,/WEX2/E_>$K_>7AZR$$`#E^(V9OS:P5RH<Q
XXM_>7A*>LA%``Y?B-F;QE>(U;5(0H`.5XC5NLIZR$6`#E^(V9O&5XC5M7-N#'1
XXMT<J$,2$(`#E>(U;K*>LA%``Y?B-F;QE>(U9"2_WEX2GK(10`.7XC9F\97B-6
XXMU2$*`#E>(U;K*>LA%@`Y?B-F;QG1<R-R8&GE_>7A*>LA%@`Y?B-F;QG1<R-R
XXMP^,PP[`P(00`.5XC5NO)3F]T(&5N;W5G:"!M96UO<GD@=&\@97AP86YD('=I
XXM;&1C87)D`,TS%0``(0``1$U@:1$/`.O-K!7*2#(A#@`Y7B-6ZUX6`-4A#@`Y
XXM7B-6ZUX6`.'-K17*\#$A`0#)(0X`.5XC5NM>%@#5(0X`.5XC5NM>%@#AS:P5
XXMRA(R(0``R2$,`#GE?B-F;R/KX7,C<NLK(0X`.>5^(V9O(^OA<R-RZRLA#``Y
XXM7B-6ZWZWPD4R(0``R</",<G-,Q4``"$,`#GE?B-F;R/KX7,C<NLK7A8`0DM@
XXM:1$J`,UR%<)Z,F!I$3\`S7(5RGXR(0$`R7BQRHXR8&D1(`#-@17"3C(A``#)
XXM$0`!U<4.&LT%`-'5#A3-!0#!T;?*^`!060X0S04`#AH1@`#-!0##``$A@``9
XXMZ\/2`!&2,B'/``8Q&G<3(P7"RS(!7``1``$J!@#YP\\`S3,5```A#``Y7B-6
XXMU<UC,]')S3,5_/\A$``Y7B-6(1(`.7XC9F_-*A;K(00`.7,C<B$$`#E>(U;5
XXMS6,ST>LA!@`Y<R-R>K/"+C,A``#)(0``Y2$&`#E>(U;5(0H`.5XC5M7-%T+1
XXMT=$A!@`Y7B-6Z\G-,Q4``"$,`#E>(U;5S8(TT<G-,Q4``"$,`#E>(U;K(R,C
XXM$0(`Z\WS%B/E_>$JY5+EW>%\M<*;,R'A4N7=X2+E4B+A4B$!`"+C4MUN`-UF
XXM`41-P[(S8&GEW>%@:5XC5D)+(0(`"5XC5OWEX<W8%LH<-"$"``E>(U;]Y>'-
XXM<A7*X#-@:5XC5MUS`-UR`<,/-/WE8&DC(]'E?B-F;^O-AA;KX7,C<B$"``E>
XXM(U;K*2E061E$3?WEX>LA`@`)<R-RW>7A(N528&D1!``9R6!IZRKE4LUR%<HY
XXM-/WES3TTT41-?+7".30A``#)PZ8SR<TS%0``(0P`.5XC5NLI*>7-GS711$T1
XXM___-<A7*8#0A``#)8&GEW>$A#``Y7B-6W7,"W7(#W>7A$00`&>7-@C31*N52
XXMR<TS%0``(0P`.5XC5B'\_QE$32KE4N7=X<.F--UN`-UF`>7=X6!IW>71Z\WG
XXM%LK#--UN`-UF`>5@:='KS>86PO4TW6X`W68!Y=WEX='KS=@6RO(T8&G=Y='K
XXMS><6PO4TW6X`W68!Y6!IT>O-YA;"]33#G33=;@#=9@'E(0(`"5XC5NLI*5!9
XXM&='-<A7*/37=;@#=9@$C(UXC5M5@:2,CT>5^(V9O&>OA<R-RW6X`W68!7B-6
XXM8&ES(W+#237=;@#=9@'K8&ES(W+=;@+=9@,I*=WET1E06<UR%<J$-2$"``E>
XXM(U;5W>7A(R/1Y7XC9F\9Z^%S(W)@:5XC5MUS`-UR`<.,-6!IW74`W70!W>7A
XXM(N52R2$$`,VB-2-\M<@KR2$"`#E>(U8JYU(9Z]K$-2KI4CE]DWR:VL0U*N=2
XXMZR+G4NM\M<FO/6=OR2$"`#E^(V8O;WPO9R,BZ5+)8V]N.@!#3TXZ`&QS=#H`
XXM3%-4.@!P<FXZ`%!23CH`<'5N.@!054XZ`')D<CH`4D12.@#-,Q4``"$.`#E>
XXM(U;5(0$#Y2$0`#E>(U;5S2PVT='1R<TS%?S_(?!8Y=WA(0``ZR$&`#ES(W+#
XXM7C;=Y>$1"``9Y=WA(08`.>5^(V9O(^OA<R-R(08`.5XC5B$+`,VL%<J`-MUN
XXM!-UF!1'4+,UR%<**-L-%-B'X_R*662'__\DA5%E$3<.:-F!I$08`&41-8&E^
XXM([;*NS8A$``Y7B-6U6!I7B-6U<TS0M'1RKLVPY(V(0(`"5XC5M7]X2$2`#E>
XXM(U8A`P#-(A4CZR$$`#ES(W(A!``Y7B-6(0$`S2(5R@(W_6X`)@#==0!\M<("
XXM-R'V_R*662'__\DA!``Y7B-6(0(`S2(5RBDW_6X!)@#==0%\M<(I-R'V_R*6
XXM62'__\DA!``)7B-6W7,&W7('_6X")@#==0+];@,F`-UU`R&>.=UU!-UT!<7=
XXMY2$8`#E>(U;5(1@`.5XC5M4A&``Y7B-6U?UN!/UF!<TR%>LA"@`Y^2$``,VL
XXM%<J/-R'4+-UU!-UT!2'__\DA!@`Y7B-6Z\G-,Q4``"$,`#E>(U8A``#-K!7"
XXMO3<A#``Y7B-6(0L`S:T5RL<W(?W_(I99(?__R2$,`#E>(U;K*2DI$?!8&41-
XXM(08`"5XC5M4A!``)7B-6Z\TR%='K(0P`.7,C<B$``.LA`P`)<R$"``ES(0$`
XXM"7-@:7,AU"SK(00`"7,C<B$,`#E>(U;KR<TS%0``(>M21$W#,SA@:1$F`!E$
XXM36!I$1M4Z\WF%LI.."$E``E>%@!ZL\I8.,,K."'Y_R*662'__\G%(0X`.5XC
XXM5M7-DB;1T<IS."'Z_R*662'__\DA#@`Y7B-6(0`"S2(5RHTXQ2$3`.7-62;1
XXMT<4A#P#ES5DFT=$1_P#-<A7*T#@A#@`Y7B-6(0`#S2(5RL,XQ2$6`.7-62;1
XXMT1'_`,UR%<K-."'__R*662'__\G#\#@A#@`Y7B-6(0`%S2(5$0`%S7(5RO`X
XXM(?O_(I99(?__R2$``.LA(0`)<R-R(2,`"7,A)``)<V!IY2$4`#E>(U8A!@`9
XXMT7,C<B$.`#E>(U8A`P#-(A4CZR$E``ES(0(`S2(5RDHY(7LYY2$4`#E>(U8A
XXM!``9T7,C<L-=.2%A.>4A%``Y7B-6(00`&=%S(W(A``#)S3,5```A``#E(0X`
XXM.5XC5B$E`!G1<R$``,G-,Q4``"$,`#E.(T;%(1``Y<U9)M'1(0``ZR$E``ES
XXM(0``R<TS%0``(0``R<TS%0``(0P`.5XC5B$``,VL%<+,.2$,`#E>(U8A"P#-
XXMK17*UCDA_?\BEEDA___)(0P`.5XC5NLI*2D1\%@91$TA$``Y7B-6U2$0`#E>
XXM(U;5(08`"5XC5M5@:5X6`.LI$1M4&5XC5NO-,A71T=')S3,5_/\A``!$32$0
XXM`#E>(U;5W>'=Y>$1)``9?K?*=3K=;B0F`.4A@`#1Z\V&%D1-ZR$4`#E^(V9O
XXMS><6RETZ(10`.5XC5D)+Q2$4`#E>(U;5W>7-+#O1T='*=3HA___)(10`.5XC
XXM5F!IS886$0<`Z\WS%NLA!@`Y<R-R>K/*VCHA!@`Y7B-6U2$4`#E>(U9@:1GE
XXMW>7-*$'1T='K(00`.7,C<GJSRMHZ(08`.5XC5B$$`#E^(V9OS886$0<`Z\UV
XXM%E!9&<DA!@`Y7B-6(0<`S7864%D91$U@:>LA%``Y?B-F;\WF%LHC.R$4`#E>
XXM(U9@:<V&%N4A%``Y7B-68&D9Y=WES2P[T='1RB,[8&G)(10`.5XC5NO)S3,5
XXM```A#``Y3B-&(8``Y2$:`.7-62;1T<4A(0#ES5DFT=$BEEE\M<I;.R'__\DA
XXM$``Y7B-6U2$D``E>%@`A@``9Y2$2`#E>(U;5S?=!T='1(20`"5X6`"$0`#E^
XXM(V9O&1%_`,TB%>LA)``)<WJSPJ\[8&D1(0`9Y7XC9F\CZ^%S(W(A``#)S3,5
XXM```Z)%1O)@!\M<([/"'_`'TR(U0A``!],B54?3(D5"$C5.4A"@#ES5DFT=$A
XXM"@#E(0(`Y<U9)M'1.B54;R8`$1H`S7(5R@D\(0``?3(D5"$``,DA#0#E.B14
XXM;R8`(WTR)%01(U09(]%S(0H`Y3HD5&\F`"-],B14$2-4&2/1<R$"`"(E53HD
XXM5&\F`$1-ZR$0`#E^(V9OS:T5REL\(1``.5XC5D)+Q2HE51$C5!GE(1(`.5XC
XXM5M7-]T'1T=%@:>LJ)549(B558&GK.B14;R8`Z\V&%GTR)%1@:<G-,Q4``"$.
XXM`#E.(T8A``#EW>'#K#S=Y>$CY=WAW>7AZR$0`#E^(V9OS:P5RM\\(0P`.5XC
XXM5M7-62;1Y6!I(T1-*]%S(1H`S7(5PM\\PZ4\W>7AR<TS%0``(0P`.5XC5B$`
XXM`,VL%<((/2$,`#E>(U8A"P#-K17*$CTA_?\BEEDA___)(0P`.5XC5NLI*2D1
XXM\%@91$TA$``Y7B-6U2$0`#E>(U;5(08`"5XC5M4A`0`)7A8`ZRD1)U497B-6
XXMZ\TR%='1T<G-,Q7\_R$``$1-(1``.5XC5M7=X=WEX1$D`!E^M\JS/=UN)"8`
XXMY2&``-'KS8861$WK(10`.7XC9F_-YQ;*FSTA%``Y7B-60DO%(10`.5XC5M7=
XXMY<UJ/M'1T<JS/2'__\DA%``Y7B-68&G-AA81!P#KS?,6ZR$&`#ES(W)ZL\H8
XXM/B$&`#E>(U;5(10`.5XC5F!I&>7=Y<TP0='1T>LA!``Y<R-R>K/*&#XA!@`Y
XXM7B-6(00`.7XC9F_-AA81!P#KS7864%D9R2$&`#E>(U8A!P#-=A9061E$36!I
XXMZR$4`#E^(V9OS>86RF$^(10`.5XC5F!IS886Y2$4`#E>(U9@:1GEW>7-:C[1
XXMT='*83Y@:<DA%``Y7B-6Z\G-,Q4``"$,`#E.(T8A@`#E(1H`Y<U9)M'1Q2$A
XXM`.7-62;1T2*661$!`,UR%<*E/BJ661$$`,UR%<K`/B$``"*662$:`.4A@`#E
XXM(8``Y<T70M'1T</,/BJ667RURLP^(?__R2$0`#E>(U;5(1``.5XC5M4A)``)
XXM7A8`(8``&>7-]T'1T='%(2(`Y<U9)M'1(I99?+7*!#\A___)(20`"5X6`"$0
XXM`#E^(V9O&1%_`,TB%>LA)``)<WJSPC8_8&D1(0`9Y7XC9F\CZ^%S(W(A``#)
XXMS3,5_O\A$``Y3B-&(0``Y=WAPU8_W>7A(^7=X=WEX>LA$@`Y?B-F;\VL%<JQ
XXM/V!I(T1-*UX6`"$$`#ES(W(A!``Y7B-6(0H`S7(5RID_(0T`Y2$0`#E>(U;5
XXMS5DFT=$A!``Y7B-6U2$0`#E>(U;5S5DFT='#3S_=Y>')S3,5```A#``Y7B-6
XXM(0``S:P5PO$_(0P`.5XC5B$+`,VM%<+Q/R$,`#E>(U;K*2DI$?-8&5X6`'JS
XXMPO\_(?W_(I99S>A#_____\DA#``Y7B-6ZRDI*1'V6!E>(U9"2R$2`#E>(U;K
XXMPZ!`Q2$0`.7-62;1T1'_`,UR%<H_0"']_R*66<WH0______)Q2$C`.7-62;1
XXMT2$``.LA)``)<R$.`#GE(2$`"5XC5NO-44?-VD,'````S21%S15$(20`"5X6
XXM`.O-7T?-+43-JT3-043AY<WO0\VK1.'-`D3#LT`A^O\BEEG-Z$/_____R<VQ
XXM%@,``@`>0`$`4D```(]`DD`A``#K(2,`"7,A#@`YS>]#S=I#`````,TG1\KN
XXM0"$``.LA(0`)<R-R(20`"7,A^O\BEEG-Z$/_____R2$.`#G-[T/-<D<1?P#-
XXM(A7K(20`"7,A#@`YS>]#S=I#!P```,U21<UR1^LA(0`)<R-R(0X`.<WO0\G-
XXM$Q<.(<,U0<T3%PXBQ2I"4>LA@``9(D)1#AK-!0#!Q2I`4>O-!0"WPFY!*D!1
XXM$2$`&33"8$$C-"I$42LB1%%]M,(V0<');R8`(I99P2I$4<G-,Q7$_R$$`#GE
XXM(4P`.5XC5M7-DB;1T2$$`#GE(1,`Y<U9)M'1(00`.>4A2@`Y7B-6U<V2)M'1
XXM(10`.>4A3``Y7B-6U<V2)M'1(00`.>4A%P#ES5DFT=')S3,5W/\A!``YY2$R
XXM`#E>(U;5S9(FT=$A!``YY2$3`.7-62;1T<G%(0D`.48K3BM6*UXK?BMN9WBQ
XXMRA5"&G<3(PO#"$+!R<4A!``Y7B-6(TXC1B-NZWBQRC%"<R,+PR9"P<DA`@`Y
XXMQ0'_?UXC5B-^(V9O>+'*5T(:OL)<0K?*5T(C$PO#0T+!(0``R<':9D(A`0!]
XXMM,DA__]]M,DA`@`YQ0'_?UXC5M4C?B-F;WBQRHY"?A*WRHY"(Q,+PWU"X<')
XXM(0(`.7XC9F\1``"OOLJF0A,CPYU"ZWVTR2$"`#G%7B-6U2->(U8C3B-&Z]'#
XXM0T(A`@`YQ5XC5M75(UXC5B-.(T;KT<-]0L4!_W\A!``Y7B-6U2-^(V9OZWBQ
XXMRHY"?K?*^$(C"\/I0NO#?4(A`@`YQ5XC5M75(UXC5B-.(T;AK\/I0L4A!``Y
XXM7B-6(V[K?K?**T.[RC%#(\,>0R$``*_!R7RUP<G%(00`.5XC5B-NZP$``*^^
XXMRDU#(P/#1$-XL<HK0PLK?KO"34/#,4,A`@`Y?OX@RH)#_@G*@D/^"LJ"0\.7
XXM0R$"`#E^_D':ET/^6]*70R$!`'VWR2$"`#E^_F':ET/^>]J"0R$``*_)(0(`
XXM.7[^,-J70_XZTI=#PX)#(0(`.7[^8=J_0_Y[TK]#UB!O)@"WR2$"`#E^_D':
XXMU4/^6]+50\8@;R8`M\G1(00`&>7KZRJ:5L/S0]$A!``9Y>OK*IA6&G<C$QIW
XXM(Q,:=R,3&G?)ZRJ85GX2$R-^$A,C?A(3(WX2R>$B+U4JF%81`P`95BM>*]56
XXM*U[5*B]5Z>$B+U4JFE;1<R-R(]%S(W(J+U7I*II6ZRJ85B*:5NLBF%;)*IA6
XXMKQ8$/@">=R,5PE9$R2J85A8$?K?"(4<C%<)E1,,61Z\]P<FO/,')Q2J85NLJ
XXMFE8C(R,3$Q,:M_J41*[Z=D3#F$2N^G)$!@0:OMIR1,)V1"L;!<*:1*_!R<4J
XXMF%;K*II6KP8$&HX2(Q,%PK9$P<G%*IA6ZRJ:5J\&!!J>$B,3!<+,1,')Q2J8
XXM5NLJFE8&!!JF$B,3!<+A1,')Q2J85NLJFE8&!!JV$B,3!<+V1,')Q2J85NLJ
XXMFE8&!!JN$B,3!<(+1<')*IA6%@1^+W<C%<(;1<DJFE9^YC_(Q4<JF%9>(U8C
XXM?B-F;RGK*>O20$4C!<(X141-*IA6<R-R(W$C<,')*II6?N8_R%<JF%8C(R-^
XXMM_IW1>4>!+=^'W<K'<)I1>$5PF5%R>4>!#=^'W<K'<)[1>$5PG=%R=4&!'X2
XXM(Q,%PHQ%X4^W\,-31,4JF%81.U7-B45Y,CE5*II6$4-5S8E%.CE5J3(Y5<T(
XXM1A$[52J85@8$&G<3(P7"Q$7!.CE5M_I01,G%*IA6$3M5S8E%>3(Y52J:5A%#
XXM5<V)1<T(1A$_52J85@8$&G<3(P7"]T7!.CE5M_I01,D&!"$_5:]W(P7"#D8^
XXM(#(Z52$[508(MWZ/=R,%PA]&G^8!3P8$$3]5(4-5MQJ>$A,C!<(T1GG>`,)/
XXM1B$[530A.E4UPAE&R2$Z537*@48A.U4&"+=^CW<C!<)<1I]/!@01/U4A0U6W
XXM&HX2$R,%PF]&><X`PD]&PT-&!@01/U4A0U6W&HX2$R,%PHI&R<4JFE8&!!%#
XXM57X2(Q,%PIU&*IA6!@01/U5^$B,3!<*M1@8$(3M5KW<C!<*[1CX@,CI5(3M5
XXM!@BW?H]W(P7"S$;2]T8&!!$[52%#5;<:CA(3(P7"X$8&!!K.`!+2]T83!<+K
XXM1B$Z537"QD8JF%81.U4&!!IW$R,%P@9'P<G->D3*(4<A``"OR<UZ1,H61R$!
XXM`*\\R<UZ1/HA1\,61\UZ1/HA1\HA1\,61\UZ1/H61\,A1\UZ1/H61\H61\,A
XXM1^LJF%9S(W(C-@`C-@#)ZRJ85G,C<B-ZM_)91S;_(S;_R2J85EXC5NO)R<TS
XXM%0``(0P`.5XC5M7-QD?1(0P`.5XC5B$$`!GES>A#`````.'-`D0A``#E(1``
XXM.5XC5NO1<R-R(0``Y2$0`#E>(U;K(R/1<R-RR<TS%?C_(4=5Y2%I`.7-62;1
XXMT>LA!``Y<R-R(0@`.>4J1U41:0L9S5%'S=I#@%$!`,V41N'-`D0Z255O)@`1
XXM!`#KS5P6$0H`S2H6Y3I)56\F`!$/`,TB%=$9ZR$&`#ES(W(A"``YY2$(`#E>
XXM(U;KS5%'S=I#$`X``,V41LU!1.'ES>]#S:M$X<T"1#I*56\F`!$$`.O-7!81
XXM"@#-*A;E.DI5;R8`$0\`S2(5T1GK(08`.7,C<B$(`#GE(0@`.5XC5NO-44?-
XXMVD,\````S91&S4%$X>7-[T/-JT3AS0)$(00`.5XC5B$$`,U<%A$*`,TJ%N4A
XXM!@`Y7B-6(0\`S2(5T1GK(08`.7,C<B$(`#GE(0@`.5XC5NO-44?-043AY<WO
XXM0\VK1.'-`D0A%``Y?B.VPO]((0@`.<WO0\DA%``Y7B-6U2$*`#G-[T/AS0)$
XXMR<TS%0``(0P`.5XC5M7-*DG1Y<VM3M')S3,5Z/\A``#K(00`.7,C<B$``.LA
XXM!@`Y<R-R(1``.>4A!@`Y7B-6Z\U?1\W:0SP```#-E$;-%40A*@`Y7B-6Z\WO
XXM0\TM1,W!1.'-`D0A$``YY<U#3-'EW>'=;@[=9@]$32'75>LA&``Y<R-RP[!)
XXM(1@`.>5^(V9O$0@`&>OA<R-RZQ'X_QDA&``Y7B-6ZUXC5B$``,V1%<K@22$8
XXM`#E>(U;K7B-6(08`.7XC9F_-<A7"X$G#F4DA&``Y7B-6ZUXC5B$``,V1%<K6
XXM2]UN"MUF"Q%L!QGK(10`.7,C<B$8`#E>(U8A!``97B-6(18`.7,C<L,U2B$6
XXM`#GE?B-F;Q$&`!GKX7,C<NL1^O\9(18`.5XC5NM^([;*7THA%@`Y7B-6ZUXC
XXM5B$4`#E^(V9OS7(5PE]*PQY*(18`.5XC5NLC(UXC5M7]X2$6`#E>(U8A!``9
XXM7B-6(1H`.7,C<OWEW>7-VDO1T>7]X2$:`#E>(U;5W>7-VDO1T>LA&@`Y<R-R
XXM(1@`.5XC5B$&`!E>(U;KPWU+8&G]Y='KS:T5PN!*8&G]Y='-<A7*$DO=;@3=
XXM9@41`@#KS9$5RA)+8&GK(1H`.7XC9F_-K!7"%DM@:>LA&@`Y?B-F;\UR%<H2
XXM2]UN!-UF!1$!`.O-K!7"%DO=Y>')PXQ+8&G]Y='KS:T5PG9+8&G]Y='-<A7*
XXM0$O=;@3=9@41`@#KS9$5PG9+8&GK(1H`.7XC9F_-K!7"=DM@:>LA&@`Y?B-F
XXM;\UR%<IR2]UN!-UF!1$"`.O-K!7"=DO=Y>')PXQ+W>7AR<VQ%@(``0"Y2@``
XXM&4MY2R$0`#GE(1H`.5XC5NLC(UXC5B$0#LTJ%LU?1\U!1.'ES>]#S:M$X<T"
XXM1"$0`#GES4-,T>7=X=WEX1$0`!GE?B-F;R/KX7,C<NLKW>7AR<TS%0``(0P`
XXM.4XC1B$.`#E>(U;5W>'=Y>$1.@#KS9$5RA1,(0H`"5XC5M7-KU#1$9/^&=WE
XXMT1GEW>$A#``)7B-6U2$.``E>(U;5W>7AT>O-AA;1&1&\`AD1!P#KS<85Y=WE
XXMX='KS886R<TS%?C_(0@`.>4A%@`Y7B-6Z\WO0\W:0X!1`0#-U47AS0)$(00`
XXM.>4A%@`Y7B-6Z\WO0\W:0X!1`0#-FT7AS0)$(0@`.<WO0\W:0P````#-)T?*
XXMSDPA"``YY<WH0X!1`0#-043AY<WO0\VK1.'-`D0A!``YY<WH0P$```#-043A
XXMY<WO0\W!1.'-`D0A!U;E_>$A"``YS>]#S=I#/````,W51<UR1^7]Y>$C(^7]
XXMX2LKT7,C<B$(`#G-[T/-VD,\````S9M%S7)'Y=WAW>7A$3P`Z\W&%>7]Y>$C
XXM(^7]X2LKT7,C<B$\`-WET<U8%>7=X=WEX>7]Y>$C(^7]X2LKT7,C<B$$`#G-
XXM[T/-VD,$`'``S:M$S=I#!P```,W51<UR1R(35B$$`#G-[T/-VD,`````S3Q'
XXMRLI-(48`Y=WAPXM-W>7A(^7=X2O=Y<VO4-'-7T?-%40A"``YS>]#S2U$S3Q'
XXMRL=-(00`.>7=Y<VO4-'-7T?-043AY<WO0\W!1.'-`D3#@TW#$DXA1@#EW>'#
XXMVTW=Y>$KY=WA(R$$`#G-[T/-VD,`````S2='RA).(00`.>7=Y>$KY<VO4-'-
XXM7T?-043AY<WO0\VK1.'-`D3#TTW=Y>$B$58A!``YS>]#S7)'1$TB%5;=Y<VO
XXM4-$1;@'-<A7*/$XA'0`B9U4A``#EW>'#34[=Y>$CY=WA*]WEX2D195497B-6
XXMU6!IT>O-D17*>4[=Y>$I$655&5XC5F!IZ\V&%D1-PT5.(1P`(F=58&DCY?WE
XXMX2,CY?WA*RO1<R-RW>7AY?WEX2,CY?WA*RO1<R-R(0``(A=6(0=6R<TS%0``
XXM(4M51$TA6E#EW>'=Y>$CY=WA*UX6`-5@:2-$32O1<WJSRME.P[U.(0P`.5XC
XXM5B$,`!E>(U8A`P#-*A81=%`9Y=WA(4M51$W=Y>$CY=WA*UX6`-5@:2-$32O1
XXM<]WEX2/EW>$K7A8`U6!I(T1-*]%SW>7A(^7=X2M>%@#58&DC1$TKT7-@:2-$
XXM32LA#``Y7B-6(0@`&>7]X?UN`/UF`1$#`,TJ%A&*4!GEW>'=Y>$CY=WA*UX6
XXM`-5@:2-$32O1<]WEX2/EW>$K7A8`U6!I(T1-*]%SW>7A(^7=X2M>%@#58&DC
XXM1$TKT7/]Y>$K*^7]X5XC5M7%S<Q0T=%$3?WEX2LKY?WA7B-6(60`&>7%S<Q0
XXMT=%$3?WEX2LKY?WA7B-6(60`&>7%S<Q0T=%$3?WEX2LKY?WA7B-6(60`&>7%
XXMS<Q0T=%$32$,`#E>(U8A"@`97B-6(60`S9$5RC-0(3(`ZR$!``ES(0P`.5XC
XXM5B$*`!E>(U8A,``9$<@`Z\V1%>LA`@`)<R$"`%!9&41-(0P`.5XC5B$*`!E>
XXM(U8A9``9Y<7-S%#1T41-(4M5R41A>2!-;VX@,#`@,#`Z,#`Z,#`@,3DP,`H`
XXM4W5N36]N5'5E5V5D5&AU1G)I4V%T`$IA;D9E8DUA<D%P<DUA>4IU;DIU;$%U
XXM9U-E<$]C=$YO=D1E8P#-,Q4``"$,`#E>(U8A!`#-QA7"R%`A;@')(6T!R<TS
XXM%0``(0P`.4XC1F!I(T1-*R$.`#E>(U8A"@#-D17*$E$A#@`Y7B-6(0H`S5@5
XXM$0H`Z\W&%1$P`!GE8&DC1$TKT7/#'E$A(`#E8&DC1$TKT7,A#@`Y7B-6(0H`
XXMS<85$3``&>5@:2-$32O1<V!IR0!R"@```````````````#`Q,C,T-38W.#EA
XXM8F-D968`````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````;EH`
XXM_```````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM``````````````````````````````````````````````#4+!4ZLSN0/```
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````U"Q3/3H_.C\`````
XXM````````````````````````````````````````````````````````````
XXM```````?`!P`'P`>`!\`'@`?`!\`'@`?`!X`'P"V!P4`30&W!SH`+P$``'<`
XXM+P&R!Y`!``"S!R\!``"T!R\!.@```"\!00"_!U8`+P'`!U8`+P'!!U8`+P$`
XXM`)`!``"_!U8`$`'`!U8`$`'!!U8`$`$``)`!```!``$`?54!``(``0"/50``
XXM`P`!`*=5`0`$``$`OU4!``4``0"_50$`__\`````````````````````````
XXM```````````````!````!`````````$!``$``````````0(``0``````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````,54U
XXM50`````#`6-A=```````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM`````````````````````````"LG-"<````````*4TA!4CH@0W)E871E+V5X
XXM=')A8W0@9FEL92!A<F-H:79E(&9O<B!E>'1R86-T:6]N(&)Y("]B:6XO<V@@
XXM*&YO<FUA;&QY*2X*"G5S86=E.B!S:&%R(%LM=2!A<F-H:79E72!;6RUA72!;
XXM+7`@<')E9FEX72!;+60@9&5L:6U=(%LM8F-V72!F:6QE<R`^(&%R8VAI=F5=
XXM"@H)=VAE<F4Z"2UA("!A;&P@=&AE(&]P=&EO;G,@*'8L8RQB+"UP6%@I"@`)
XXM"2UB("!E>'1R86-T(&%B<V]L=71E('!A=&AS(&EN=&\@8W5R<F5N="!D:7)E
XXM8W1O<GD*"0DM8R`@8VAE8VL@9FEL97-I>F5S(&]N(&5X=')A8W1I;VX*"0DM
XXM9"`@=7-E('1H:7,@14]&(&1E;&EM:71E<B!I;G-T96%D(&]F(%-(05)?14]&
XXM"@`)"2UP("!U<V4@=&AI<R!A<R!P<F5F:7@@=&\@96%C:"!L:6YE(&EN(&%R
XXM8VAI=F5D(&9I;&5S"@D)+74@('5N<VAA<B`\87)C:&EV93X*"0DM=B`@=F5R
XXM8F]S92!O;B!E>'1R86-T:6]N+"!I;F-L+B!E8VAO:6YG(&9I;&5S:7IE<PH`
XXM``(``)XY`P```)XY`@`!`.,L`@```@$`XRP"```"`0#C+`(``````-0L````
XXM````U"P```````#4+````````-0L````````U"P```````#4+````````-0L
XXM````````U"P```("`0">.0$``````-HU2%D"`-\U2%D"`.0UY%@%`.DUY%@%
XXM`.XUY%@%`/,UY%@%`/@UY%@$`/TUY%@$``(VZE@#``<VZE@#````FED`````
XXM```!`0`!'C@`````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM````````````````````````````````````````````````````````````
XXM`````````````````````````````````````````````!H:&AH:&AH:&AH:
XX(&AH:&AH:&@`:
XX`
XXend
SHAR_EOF
if test 31597 -ne "`wc -c shar.uue`"
then
echo shar: error transmitting shar.uue '(should have been 31597 characters)'
fi
#	End of shell archive
exit 0
-- 

Mike Kersenbrock
Tektronix Software Development Products
Aloha, Oregon
20-Jul-86 06:19:32-MDT,2246;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 20 Jul 86 06:19:25-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000661; 20 Jul 86 7:44 EDT
Received: from USENET by SMOKE.BRL.ARPA id a023275; 20 Jul 86 7:41 EDT
From: "Willie Smith, LTN Components Eng." <w_smith@wookie.dec.com>
Newsgroups: net.micro.cpm
Subject: UUDECODE sources in assembly?
Message-ID: <4283@decwrl.DEC.COM>
Date: 20 Jul 86 02:15:34 GMT
Sender: daemon@dec.ARPA
To:       info-cpm@AMSAA.ARPA

Greetings.  I really like the idea of passing around binaries
(with the sources of course, no trojans or logic bombs please!)
using UUENCODE and UUDECODE, and I can hardly wait to start
using them on things like crunch12, but there's this problem...
uudecode.com is uuencoded, and I don't have Pascal.  With the
help of my friendly (and incredibly patient) system mangler, I
managed to find an ARChived CP/M uudecode.com, but I don't have 
a CP/M ARC program.  Well, a little more searching turned up a
program DEARC.LBR, but I don't have a library utility.  All I
need now is a library utility that's uuencoded, and I can close
the loop!  :+)
	Actually, I did manage to find a SWEEP utility that runs on 
a VAX, but the uudecode.com file it builds (by the time I get it
shipped home via Kermit) doesn't work at all, and a quick disassembly
of the code leads me to believe there's a bug somewhere, it don't
look like code to me!
	A quick look at the Pascal code makes the process of uudecoding
look fairly easy, but if someone has already written an assembly
routine (or Basic, I'm not that proud) that I could use on my
copy of uudecode.uue, I could bootstrap this whole thing...
 
Many thanks as usual for any and all assistance!
 
UUCP:	decwrl!wookie.dec.com!smith
Internet:	smith@wookie.dec.com
Dec ENET:	WOOKIE::SMITH
 
The above doesn't even represent opinions, much less mine, but if it
did, and you thought Digital Equipment Corporation subscribed to my
views, you would need psychiatric help and brain removal.
 
VAX and Kermit and probably 40 percent of the words commonly in
use in the technical community (including Basic and CP/M) are
trademarks of somebody or other...
 
20-Jul-86 07:11:27-MDT,690;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 20 Jul 86 07:11:20-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a000761; 20 Jul 86 8:54 EDT
Date: Sun 20 Jul 86 06:52:46-MDT
From: Jim Forrest <JFORREST@SIMTEL20.ARPA>
Subject: Need MEX for Apple 2e
To: INFO-MICRO@SIMTEL20.ARPA
cc: INFO-CPM@SIMTEL20.ARPA, JFORREST@SIMTEL20.ARPA
Message-ID: <12224177541.12.JFORREST@SIMTEL20.ARPA>

I need MEX for an Apple 2e with microsoft card and micromodem IIe.
Would appreciate someone sending to:
JFORREST@SIMTEL20
Please reply direct to me, not to the entire list. I can handle uuencoded
or squeezed or whatever.
Thanks
Jim
-------
20-Jul-86 16:34:48-MDT,1530;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Sun 20 Jul 86 16:34:40-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a001104; 20 Jul 86 18:19 EDT
Date: Sun, 20 Jul 1986  16:17 MDT
Message-ID: <KPETERSEN.12224280396.BABYL@SIMTEL20.ARPA>
Sender: KPETERSEN@SIMTEL20.ARPA
From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
To:   Info-Cpm@AMSAA.ARPA, Mark Becker <Cent.Mbeck%OZ.AI.MIT.EDU@mit-xx.ARPA>
Subject: Public domain BASIC compiler for CP/M-80

Now available from SIMTEL20:

Filename			Type	 Bytes	 CRC

Directory PD:<CPM.BASIC>
B-COMPIL.LBR.1			BINARY	 87424  D5E5H

This is BCBC version 1.1 for CP/M-80, written by Bruce Tonkin.  It's
a BASIC compiler which generates assembler source code for ASM or MAC
(RMAC should work too).  Intel 8080 opcodes are used so the resultant
program will run on either 8080 or Z80 CP/M systems.  This BASIC uses
syntax similar to MBASIC, but some statements may need to be changed.
Be sure to read the sample program included in this LBR.

If you are unable to access SIMTEL20 because of network restrictions
it's also available on my RCP/M Royal Oak (MI) which may be accessed
at 300 bps (Bell 103a), 1200 bps (Bell 212a), or 2400 bps (V.22 bis).
The telephone number is (313) 759-6569.  It can also be found on the
CP/M RoundTable on General Electric Information Services' GEnie.

--Keith Petersen
Arpa:   W8SDZ@SIMTEL20.ARPA
GEnie Mail: W8SDZ
uucp:   {ihnp4,allegra,cmcl2,dual,decvax,mcnc,mcvax,vax135}!seismo!w8sdz
21-Jul-86 07:50:23-MDT,2073;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 07:50:14-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a007437; 21 Jul 86 9:09 EDT
Date: 17 Jul 1986 1042-EET (Thursday)
Message-ID: <KPETERSEN.12224319155.BABYL@SIMTEL20.ARPA>
Sender: Urs Zurbuchen <mcvax!ethz!zu@seismo.css.gov>
From: Urs Zurbuchen <mcvax!ethz!zu@seismo.css.gov>
To: W8SDZ@SIMTEL20.ARPA
Subject:   PD-Editor
ReSent-From: KPETERSEN@SIMTEL20.ARPA
ReSent-To: Info-Cpm@AMSAA.ARPA
ReSent-Date: Sun 20 Jul 1986 19:50-MDT

I am a European CP/M user. I'm looking for a new programming editor.
By now, I'm using WordStar, but if I can something 'better', I would
be really glad.  I write to you because you regularly publish a list
of PD software which American users can download from SIMTEL.  I'm
sure there are some PD screen editors on this system. If there is even
one which comes close to my needs (see below), could you mail me how I
can get hands on that piece of software? Any other hints concerning an
editor would be greatly appreciated.

Here follows my wish list:
	- small and fast
	- can use memory-mapped video board
	- editing multiple files, display at least two of them
	  simultaniously (windowing)
	- support arbitrary sized files
	- free key-to-commands-binding (no problem if I have the
	  source)
	- macros
	- automatic indenting
	- if possible without overlays, so I can run it off my
	  ramdisk without accessing the "slow and noisy" drives.
	- not too much useless infos on the screen

I think that's enough. I tried to keep the list in an order: top
points are more important than those at the end.  There is no need for
word processing capability. The language it's written in doesn't
matter, too.  I hope there is such a beast. If not, I will perhaps
write my own.  (and then donate it to the PD, if there is any
interest)

For any reply best thanks in advance,
		...Urs Zurbuchen


PS: What editor do you use for your programming?

-- 
UUCP: ...seismo!mcvax!cernvax!ethz!zu
21-Jul-86 13:09:54-MDT,952;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 13:09:47-MDT
Received: from lll-mfe.arpa by AMSAA.ARPA id a021205; 21 Jul 86 14:26 EDT
Date: Mon, 21 Jul 86 14:23 EST
From: SECRIST%OAK.SAINET.MFENET@LLL-MFE.ARPA
Subject: EMACS clones
To: INFO-CPM@AMSAA.ARPA

From:    <SECRIST%OAK.SAINET.MFENET@LLL-MFE.Arpa>   (Richard C. Secrist)
Date:    Mon, 21-JUL-1986 14:24 EST
To:      INFO-CPM@AMSAA.ARPA
Message-ID: <[OAK.SAINET.MFENET].A15B96A0.008F240E.SECRIST>
Header-Disclaimer: I don't like my headers either.
Quote: "May your future be limited only by your dreams." -- Christa McAuliffe
Organization:  Science Applications Int'l. Corp., Oak Ridge, Tenn., USA
CompuServe-ID: [71636,52]
X-VMS-Mail-To: CPM

Someone mentioned that a user's group at Los Alamos or someplace would
sell you Mark-of-the-Unicorn EMACS (now rescinded) for $50.  Does anyone
know about this ?

r c s
21-Jul-86 14:41:23-MDT,2709;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 14:41:03-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a024853; 21 Jul 86 15:50 EDT
Received: from (TTTLEH5)NEUVM1.BITNET by WISCVM.ARPA on 07/21/86 at
  14:49:25 CDT
Date: MONDAY 07/21/86 21:43:25 DNT
To:  INFO-CPM@AMSAA.ARPA
From:  TTTLEH5%NEUVM1.BITNET@WISCVM.ARPA
Subject: REV TO UUENCODE/UUDECODE

                 Hi Cpm people.

I got the uuencode/uudecode files some days ago, this is really what we
need.
BUT because of all these networks, where some of the gateways change
some of the special characters (like the ARPANET - BITNET gateway), one
can't trust all the special characters made by uuencode. So this have
to be changed. And the problem is to choose 64 chracters, which does not
changed when ported from network to network. So I took these:
             ':', '0'..'9', 'A'..'Z', 'a'..'z', '.'
eg. ':', all digits, all upper and lower case letters, '.', hoping that
they will be useable. So if we can use this instead of the UUENCODE/UU-
DECODE there is a chance of making the stuff you send useable to BITNET
users too. Or at least use it when sending binfiles to the Info-Cpm list.

So far I am working on the encoding part of the program. I have used the
code from UUENCODE/UUDECODE as inspiration, but started over because I
did not like the coding style of them. And I will probaly start on the
decoding part one of the next days. So within a week or two I should
have working and testing Pascal programs finished. But I do not know
when I can mail them to the list. That may take some time. But when done
the .COM file should be coded in some kind of HEX format, so all can
download them without problems. This is true bootstraping.

What I want is to hear what you mean about this. Comments and ideas are
very welcome. Hope that you like it and that I did not leave too much out
when explaining my ideas.

Kind regrads from Copenhagen -- Denmark.

               Klaus Elmquist Nielsen

BITNET: TTTLEH5 at NEUVM1
        NEUKLAUS at NEUVM1
-------------------------------------------------------------------------

To explain how UUENCODE works, just try to look at the binary file as
one long bitstring. If one then take 6 bit at a time, this gives you a
sequence of numbers in the range 0..63 . And since it is possible to find
64 independent characters, this give you a sequence of chars, or a text
file. Organising this in lines with control info like line length, header
and terminater gives you a useable fileformat.
UUDECODE do the work in the reverse order, eg make a binary file from the
ascii file from UUENCODE.
21-Jul-86 18:24:38-MDT,905;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 18:24:30-MDT
Received: from acc.arpa by AMSAA.ARPA id a027388; 21 Jul 86 20:01 EDT
Date: 21 Jul 86 16:43:00 PST
From: shawn@ACC.ARPA
MMDF-Warning:  Parse error in preceding line at AMSAA.ARPA
Subject: commodore128 disk format
To: shawn <shawn@acc.ARPA>
cc: info-cpm@AMSAA.ARPA
Reply-To: shawn@ACC.ARPA
MMDF-Warning:  Parse error in preceding line at AMSAA.ARPA


No, I didn't buy one, I have received a call from someone who would like
to use the Commodore-128 in its CP/M Mode, and wants to use some of our KAYPRO
public domain software. First, can anyone tell me which disk formats it will
read? and second, does it emulate any specific terminal (amd3a, vt52, or ?)
would appreciate a reply either to me, shawn@acc.arpa, or to info-cpm.
Thanks in advance
shawn@acc.arpa
------
21-Jul-86 21:39:02-MDT,1439;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 21 Jul 86 21:38:55-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a027735; 21 Jul 86 23:09 EDT
Date: Mon, 21 Jul 1986  21:08 MDT
Message-ID: <KPETERSEN.12224595451.BABYL@SIMTEL20.ARPA>
Sender: KPETERSEN@SIMTEL20.ARPA
From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
To:   "Jeffrey D. Struven" <jds%rayssd.uucp@BRL.ARPA>
Cc:   Info-Micro@BRL-VGR.ARPA, Info-Cpm@AMSAA.ARPA
Subject: Using CP/M on the Commodore 128
In-reply-to: Msg of 21 Jul 1986  14:25-MDT from Jeffrey D. Struven <jds%rayssd.uucp at BRL.ARPA>

>[the] CP/M disk [has some programs] on side 1 and the rest on side 2,
>every time he wants to change the date or use the functions that are
>not on the boot side of the disk he has to flip the disk....

The Commodore C128 CP/M disk was distributed that way for people with
single-sided drives.  It is expected that the user will copy those
files onto a double-sided disk if his drive supports that.  If he has
only one drive, there are several single-drive copy programs available
that will do the job.  One is MFT48, available from many RCP/M
systems, local user groups, or the CP/M RoundTable on General Electric
Information Service's GEnie.

--Keith Petersen
Arpa: W8SDZ@SIMTEL20.ARPA
uucp: {ihnp4,allegra,cmcl2,dual,decvax,mcnc,mcvax,vax135}!seismo!w8sdz
GEnie Mail: W8SDZ
RCP/M Royal Oak: 313-759-6569
22-Jul-86 11:41:59-MDT,2795;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 11:41:37-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a009951; 22 Jul 86 12:56 EDT
Received: from (TTTLEH5)NEUVM1.BITNET by WISCVM.ARPA on 07/22/86 at
  11:54:47 CDT
Date: Tue, 22 Jul 86 17:17:05 DNT
To:  info-cpm@AMSAA.ARPA
From:  TTTLEH5%NEUVM1.BITNET@WISCVM.ARPA
Subject: rev to uuencode/uudecode

* I got some strange msg's from info-cpm @ amsaa . arpa ,
* so I resend this letter.
                 Hi Cpm people.

I got the uuencode/uudecode files some days ago, this is really what we
need.
BUT because of all these networks, where some of the gateways change
some of the special characters (like the ARPANET - BITNET gateway), one
can't trust all the special characters made by uuencode. So this have
to be changed. And the problem is to choose 64 chracters, which does not
changed when ported from network to network. So I took these:
             ':', '0'..'9', 'A'..'Z', 'a'..'z', '.'
eg. ':', all digits, all upper and lower case letters, '.', hoping that
they will be useable. So if we can use this instead of the UUENCODE/UU-
DECODE there is a chance of making the stuff you send useable to BITNET
users too. Or at least use it when sending binfiles to the Info-Cpm list.

So far I am working on the encoding part of the program. I have used the
code from UUENCODE/UUDECODE as inspiration, but started over because I
did not like the coding style of them. And I will probaly start on the
decoding part one of the next days. So within a week or two I should
have working and testing Pascal programs finished. But I do not know
when I can mail them to the list. That may take some time. But when done
the .COM file should be coded in some kind of HEX format, so all can
download them without problems. This is true bootstraping.

What I want is to hear what you mean about this. Comments and ideas are
very welcome. Hope that you like it and that I did not leave too much out
when explaining my ideas.

Kind regrads from Copenhagen -- Denmark.

               Klaus Elmquist Nielsen

BITNET: TTTLEH5 at NEUVM1
        NEUKLAUS at NEUVM1
-------------------------------------------------------------------------

To explain how UUENCODE works, just try to look at the binary file as
one long bitstring. If one then take 6 bit at a time, this gives you a
sequence of numbers in the range 0..63 . And since it is possible to find
64 independent characters, this give you a sequence of chars, or a text
file. Organising this in lines with control info like line length, header
and terminater gives you a useable fileformat.
UUDECODE do the work in the reverse order, eg make a binary file from the
ascii file from UUENCODE.
22-Jul-86 13:13:28-MDT,1498;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 13:13:21-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a011953; 22 Jul 86 13:58 EDT
Received: from (FISHER)RPICICGE.BITNET by WISCVM.ARPA on 07/22/86 at
  12:56:43 CDT
Date: 22 July 86 13:52-EST
From:  FISHER%RPICICGE.BITNET@WISCVM.ARPA
To:  INFO-CPM@AMSAA.ARPA
X-Acknowledge:
Subject: BITNET mail follows

Date: 22 July 1986, 13:34:26 EAS
From: FISHER at RPICICGE
To:   INFO-CPM at AMSAA.ARPA

As a new-comer to this group with access only through BITNET I face the
frustration common to all non-FTP'ers:  Public domain software--you
can't get there from here.
    Maybe this is a tired question, but I'll ask anyway.  Are there any
volunteers out there in BITNET-land willing to establish branch offices
for the SIMTEL20 main repository?  It would be a major committment for
any one installation to support a complete online service, but some
distributed arrangement might be feasible.
    I, for one, am willing to offer some form of online file server
for some suitably sized subset of the respository and perhaps an
offline server (e.g. tape-based with requests processed every few
days) for the full library.  Anyone else?
    (Of course, there is the implied assumption that given the
volunteers on the BITNET side of the world there will be some way
to get a copy of the full library and the ongoing additions. :-)

JSFisher    FISHER@RPICICGE.BITNET
22-Jul-86 20:11:37-MDT,1834;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 20:11:23-MDT
Received: from mitre.arpa by AMSAA.ARPA id a020184; 22 Jul 86 21:34 EDT
Full-Name: Thomas Reid
Message-Id: <8607230133.AA23950@mitre.ARPA>
Organization: The MITRE Corp., Washington, D.C.
To: fisher%rpicicge.bitnet@wiscvm.ARPA
Cc: info-cpm@AMSAA.ARPA
Subject: Re: Bitnet access to simtel20 archives
Date: Tue, 22 Jul 86 21:33:20 -0500
From: treid@MITRE.ARPA

This will not solve your read need but may help a bit.  Treat the new
PD S/W announcements at simtel20 as your shopping list at your local
RCPM.  Ask your sysop to be looking for the new package or update.  Many
times, the RCPM may already have it.

Put a message on your local RCPM asking for those who DO have arpanet
access if they would please pick a library up off of simtel20 and upload
it to the RCPM.  All each community needs is one or two good deeders and
the software will appear.

The recent messages on uuencode and uudecode sources in Turbo Pascal also
give hope in that libraries can be transferred in the mail with only a
small penalty (33%).  Now a message asking for a good soul to send it
through the mail can be answered (though this has great possibilities
for abuse - Keith Petersen:  would you care to comment!?).

Wrose comes to worse - everything in the simtel20 archives is also
on Keith Petersen's RCPM in Royal Oak, Michigan (phone # not handy).
On Saturday or Sunday or the deep of night, a 100K download will be
only a couple of bucks.

But back to the front:  being nice to your RCPM sysop will keep him
helping you.  Remember: most sysops run their RCPMs as a hobby, many
times an expensive hobby.  They do a great service to all and rarely 
get the public appreciation that they deserve.
22-Jul-86 23:30:21-MDT,13775;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 22 Jul 86 23:29:50-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a020558; 23 Jul 86 0:44 EDT
Date: Tue, 22 Jul 1986  22:31 MDT
Message-ID: <KPETERSEN.12224872792.BABYL@SIMTEL20.ARPA>
Sender: KPETERSEN@SIMTEL20.ARPA
From: Keith Petersen <W8SDZ@SIMTEL20.ARPA>
To:   Info-Cpm@AMSAA.ARPA, Info-Micro@BRL.ARPA
Subject: Interview with MNP protocol author

By permission of the publisher...

----

Originally published by Black Box Corporation in the Black Box 
COMMUNICATOR.  For a free subscription to the COMMUNICATOR, the BLACK 
BOX(R) Catalog and/or the Personal BLACK BOX(R) Catalog, call (412) 
746-5500 or write: Black Box Corporation, Subscription Department, 
P.O. Box 12800, Pittsburgh, PA 15421.
 


          ERROR CORRECTION IN MODEMS... AND THE MNP PROTOCOL

                   An Interview with Greg Pearson, 
                         the Developer of MNP


         
       ******************************************************
                                                                    
        "(Error correction in modems) is a transparent solution   
        to a problem that's been with us all the time -- noisy    
        telephone lines."                                         

       ******************************************************


Sending information, minus the errors, is a top priority among data 
communicators everywhere.  As a result, more and more modems are being 
equipped with the MNP link protocol in their firmware.  Many people 
feel that this is the most effecicent way to eliminate errors in 
today's high-speed dial-up communications.  And Greg Pearson, MICOM's 
Chief Software Development Manager for Analog Products, is one of them.  
The MNP Protocol is his brainchild -- the product of Greg Pearson's 
attempt to develop a complete protocol, one with several layers that 
perform independently of the others.  Needless to say, he was 
successful.

This issue of the Communicator features a new Black Box modem that 
offers the benefits of the MNP error-control protocol.  That modem --
the Dial Modem 24+, featured on page 15 of the COMMUNICATOR -- is just 
one example of the important place MNP is taking in the future of data 
communications.  


BBC: In much of your published material on MNP, you've stressed that 
MNP has the richest set of protocols -- that it includes both a full-
fledged link protocol as well as higher level protocols like session 
and file transfer.  To begin our discussion on error correction in 
modems, can you tell us what you mean by a "full-fledged link protocol" 
-- and then give an overview of the different types of error correcting 
techniques?

PEARSON: For one thing, a full-fledged link protocol has to provide 
layer independence.  By that I mean that it doesn't depend on the layer 
above it to operate effectively.  Since error-control is offered at the 
link protocol layer, it's important that it be independent.  And that's 
not the case with the X.PC protocol.  X.PC is actually a layer 3 
protocol that integrates certain aspects of layer 2 from the OSI 
Reference Model.  If you're a real architectural purest, you wouldn't 
do this.  

As for the different types of error correcting techniques used for 
point-to-point error correction to date, in the hobbyiest world -- or 
rather, the retail-oriented market -- three come to mind right away.  
They are Xmodem, X.PC and MNP.  

In a sense, these three techniques have been used to accomplish the 
same work, but in different environments.  For example, many personal 
computer software packages use the Xmodem protocol for the error-free 
transmission of files over a dial-up telephone connection.  But if a 
user wants to send an error-free file from a PC into TYMNET(R), X.PC 
would be used since it's the protocol used by TYMNET.  On the other 
hand, if you wanted to do the same thing -- that is, send any data 
error-free over a dial-up connection -- with the protocol built into 
the modems themselves, you would use MNP.


BBC:  Can one protocol be replaced by another?

PEARSON:  Well, you could use X.PC or MNP in the same application as 
the Xmodem protocol.  Basically, Xmodem is a very simple technique --
one that's good for file transfer but not for interactive traffic.  

And, as I just mentioned, X.PC is a software protocol approach used by 
TYMNET.  A couple of companies have put X.PC into the firmware of 
their modems, but there are some significant disadvantages in doing 
that -- and the most noticable to the user is the difference in 
throughput.  If you take a look at the market, the use of the MNP 
error-control protocol in modems is by far the preferred choice.  It's 
currently used in the products of something like 16 or 18 modem 
vendors.


       **************************************************
                                                            
         "Imagine sending all of WAR AND PEACE with the
         probability of getting only one 1-bit error."     

       **************************************************


BBC:  Can you explain what you mean by throughput?

PEARSON:  Yes.  When you have a 2400 bps modem without error control, 
the user can expect to send 2400 bits per second.  When you implement 
X.PC in the firmware of that modem, it uses 9% of those 2400 bits per 
second for protocol purposes.  So you could expect, in the best case, 
a throughput that would be 91% of the line speed.

Now when using MNP in the firmware, you have a different situation.  
This, for the most part, is due to a feature that I refer to as 
"switch-to-sync."


BBC:  You talk about this feature in one of your articles, saying that 
it's an exclusive advantage of the MNP protocol.  Can you explain what 
happens as a result of switch-to-sync?

PEARSON:  What happens is the transmission starts in the character-
oriented mode -- or asynchronous mode.  But if the modems at both ends 
of that transmission are equipped with MNP error-correction, the 
transmission will switch to bit-synchronous between the modems.  As a 
result, the transmission is much more efficient.


BBC:  How does that affect the through-put of an MNP-equipped modem?

PEARSON:  Let me take you through the whole argument.  When a user is 
connected to a V.22 bis 2400 bps modem, that user is operating in an 
asynchronous character mode.  For every eight data bits transmitted, 
there is a start bit and a stop bit.  That means that the user is 
sending 240 characters in 2400 bits -- or ten bits per character.  

Now, when an MNP error-correcting modem is sending data, it doesn't 
send the user's start and stop bits required in the asynchronous mode.  
So for every ten bits sent by the user, MNP only sends eight -- i.e. 
MNP is sending data 20% more efficiently than the user because it's 
sending 20% fewer bits.  

As for the bandwidth, MNP uses 11% for protocol mechanisms.  So even 
though it loses 11% efficiency there, it gains 20% from the switch-
to-sync operation -- and that puts you 9% ahead of the game.   

What that all boils down to is that MNP, on an error-free line, will 
impose no throughput degradation when built into the firmware of your 
modem.  And because of the unique switch-to-sync feature, MNP is 
functionally like SDLC or HDLC, the two popular synchronous link 
layer protocols.  


BBC:  What does this all mean to the user?  

PEARSON:  You can have your cake and eat it too.  The ideal aspect of 
the MNP link protocol is that you can have it either way -- character-
oriented or bit-synchronous.  Other protocols give you no options.  


BBC:  What you're saying, then, is that MNP offers you a lot more 
flexibility than other protocols.  

PEARSON:  That's right.  And it has all the classical features of a 
layer 2 protocol:  it's full-duplexed -- that is, it can send and 
receive data at the same time -- it has error detection based on a 
very powerful 16-bit CRC, ithas retransmission for error correction, 
and it can reliably send a keyboard break signal... all of which 
actually makes it more powerful than HDLC.  


BBC:  You mentioned the 16-bit CRC, or Cyclic Redundancy Check.  Can 
you explain that?  Also, tell us what actually happens in this type of 
retransmission error correction.  I believe you refer to it as the 
'go-back-n' method of correction.  

PEARSON:  Any protocol, in order to provide an error-free transmission, 
must have two things.  One -- it has to provide a way for the receiver 
to know if an error has occurred.  That's error detection.  The 
technique employed in MNP for this error detection uses a polynomial 
function to calculate a 16-bit number which is a function of all the 
data sent in a particular message.  The MNP error-correcting protocol 
then sends those 16-bits at the end of its message.

The receiver -- as it is receiving the message -- calculates its own 
version of this 16-bit number.  Then it compares its number with the 
16-bit number sent with the message.  If the numbers are the same, the 
message is free from errors.  If the numbers are different, an error 
has occurred somewhere in the message.  That's how errors are detected.

Once an error is detected, the receiver brings the error correction 
mechanism provided by the MNP link protocol into play.  That correction 
mechanism calls for the receiver to send a message back to the sender.  
The sender -- recognizing that the last correct message sent before the 
error was data message number 'n' -- is cued to go back to the message 
following message 'n'.  In other words, if the sender has sent five 
messages, and the receiver detects an error in message 4, the sender 
will 'go back' to message 4 and begin retransmitting information again.

For all practical purposes, the result of the MNP link is error-free 
transmission.  Using the 16-bit redundancy check, it will detect every 
error which is 16 bits or smaller, with 100% probability.  As a result, 
the chances of an error occurring are actually so small that you can, 
in practice, ignore them.  Imagine sending all of WAR AND PEACE with 
the probability of getting only one 1-bit error.  That's what you could 
expect from an error-control protocol that uses the 16-bit CRC.  

       ********************************************************
                                                               
       "(MNP) is a very healthy protocol over long-delay       
       channels, and that's important to dial-up users.  You'd 
       be surprised how many of your local calls today are     
       being routed over satellite..."                         
                                                               
       ********************************************************


BBC:  MNP also has the ability to send a number of messages before any 
acknowledgement is required.  Can you explain this?

PEARSON: Any link protocol that's going to work well over telephone 
lines must have this ability.  If you're making a transcontinental call 
and it's transmitted by satellite, you don't want to wait for an 
acknowledgement from the receiver after each message.  That's how 
Xmodem works.

What you want to be able to do is send a number of messages at one 
time.  MNP lets you have up to eight outstanding messages before an 
acknowledgement is required.  And MNP is designed in such a way that 
only under the worst conditions would a sender ever have to wait 
between transmissions.  It's a very healthy protocol over long-delay 
channels, and that's important to dial-up users. You'd be surprised how 
many of your local calls today are being routed over satellite or 
microwave.  


BBC:  You've talked about MNP becoming the de facto standard -- the 
unofficial standard for dial-up connections.  On what factors would 
this really depend?  How much does the demand for error-controlling, 
high-speed modems influence this?

PEARSON:  A year ago, there was some question as to whether the V.22 
bis 2400 bps modem was really going to take off.  I don't think that's 
much of an issue anymore.  The price of these modems has come way down 
-- to the point that a 2400 bps modem can cost less than a Hayes(R) 
1200.  The higher speed modems are here to stay.

What affect does this have on the demand for error control in modems?  
First of all, we're pushing more bits through the same width pipe --
and we're getting more errors as a result.  Secondly -- because we're 
sending more bits at a time -- whenever we do get an error, it really 
clobbers more bits.  Finally, there's the way we're sending bits 
through the channels.  When we get an error, it takes longer for the 
modem to recover -- so when you lose one character, you're actually 
losing a whole slew of characters.  

In short, our communications are much more error sensitive today.  And 
we have a dramatically increased need to control errors because of 
that.  A good way of doing that is by putting the protocol right in the 
firmware of a modem -- a way that doesn't really interfere with your 
through-put.

It's a transparent solution to a problem that's been with us all the 
time -- noisy telephone lines.


                              #   #   #





                

                                         -by Betsy Momich
                                          Publications Department
                                          Black Box Corporation
23-Jul-86 04:38:32-MDT,1184;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 23 Jul 86 04:38:21-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a021273; 23 Jul 86 6:08 EDT
Received: from USENET by SMOKE.BRL.ARPA id a015555; 23 Jul 86 5:51 EDT
From: Harald Striepe <striepe%muscat.dec@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Re: commodore128 disk format
Message-ID: <10064@muscat.DEC>
Date: 22 Jul 86 21:28:39 GMT
To:       info-cpm@AMSAA.ARPA


	I do not know whether the new drives for the 128 support standard
	formats,  the older drives (1541) essentially contained the DOS in
	ROM inside the drive,  you were stuck with a fixed file structure.
	It also used group coding,  which does not follow standard FM and
	MFM formats (group coding is also used by Apple,  and was used by
	the VICTOR 9000 to achieve high storage densities).  The 1541 also
	uses varying rotational rates for different tracks.  In other words,
	standard drives cannot create disks for the commodore standard.
-- 
Harald Striepe
DEC Corporate Software Products Group, Santa Clara, CA
decwrl!muscat!striepe, decwrl!dec-rhea!dec-winery!striepe, WINERY::STRIEPE
23-Jul-86 18:16:06-MDT,1234;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 23 Jul 86 18:15:54-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a012244; 23 Jul 86 19:51 EDT
Received: from USENET by SMOKE.BRL.ARPA id a005198; 23 Jul 86 19:42 EDT
From: Peter Arrgh Korn <korn@pavepaws.ucb-vax.ARPA>
Newsgroups: net.micro.cpm
Subject: Plea for help
Message-ID: <924@ucbcad.BERKELEY.EDU>
Date: 23 Jul 86 08:43:17 GMT
Sender: news@ucbcad.ARPA
To:       info-cpm@AMSAA.ARPA


I have an old SuperBrain system, and I recently purchased an IBM
clone.  All of my files are in Lexisoft's Spellbinder, and for the
life of me, I can't get XenoCopy or Uniform to read the disk and
get the files off.

Does anyone out there have ANY ideas?  Also, where can I pick up
a terminal program for my SuperBrain (and thus transfer via the
serial port)?  And finally, does anyone out there have the
pinouts for the SuperBrain?

Many many thanks to anyone who can help!
(and a bottle of your favorite beer to the one who's fix works!)

Peter
-----
Peter Korn				"Fred Astaire?  Ginger Rogers did
korn@ucbvax.Berkeley.EDU		 everything he did, backwards
{dual,decvax,sdcsvax}!ucbvax!korn	 and in high heels!"
23-Jul-86 19:58:02-MDT,2581;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 23 Jul 86 19:57:50-MDT
Received: from xerox.arpa by AMSAA.ARPA id a012638; 23 Jul 86 21:29 EDT
Received: from PinotNoir.ms by ArpaGateway.ms ; 23 JUL 86 18:27:44 PDT
Date: 23 Jul 86 18:27 PDT
From: ghenis.pasa@xerox.ARPA
Subject: Re: Plea for help (Superbrain to MS-DOS)
In-reply-to: Peter Arrgh Korn <korn@pavepaws.ucb-vax.ARPA>'s message of
 23 Jul 86 08:43:17 GMT
To: info-cpm@AMSAA.ARPA
Message-ID: <860723-182744-2114@Xerox>


Peter,

One thing worth trying is to find out IF a diskette WRITTEN ON THE
IBM-PC in Superbrain format (using Uniform for example) can be read by
your Superbrain. If so then you can use you PC to pick up a copy of
Modem7 (to transfer using the XMODEM protocol) from any BBS and pass it
on to your Superbrain to enable the file transfer through the serial
port (get XModem for your IBM too if you don't have it already).

If you're unlucky and the incompatibility goes both ways you will have
to contact some user group to see if they can provide Modem7 for the
Superbrain in the right format. A third possibility, which is likely
since Uniform failed to do the trick, is that your disk drives on one of
the machines is out of alignment. If that is the case you may not be
able to read floppies produced on any other computer unless you realign
them first.

A simpler (although unsafe) way to get the files across if proper
methods fail is to use PIP

With PIP you can send the content of a file to the serial port (consult
your CP/M documentation for specifics). On the IBM side, just do a 

COPY COM1: <filename>

to pick up the bytes. This is unsafe because no error checking is taking
place, but with a bit of luck the file will make it across in one piece.
In any case it won't hurt anything and you can try it right away. Make
sure your serial port settings are the same on both ends. To set your
serial port, use MODE on the IBM (see DOS manual); in CP/M I think that
STAT is the program to use (see CP/M manual).

If you try this method, please send out a message to report your results
(I've never tried it but it sounds like it should work). If you need to
get Modem7 from a user group send me another message, I might be able to
help. 

BTW, some mailer along the line rejected my first message addressed
directly to you <korn@pavepaws.ucb-vax.ARPA> as undeliverable  (?), so
I'm sending my reply to the whole DL.

Good luck!

-- Pablo Ghenis, Secretary, Osborne Komputer Owners' Klub

24-Jul-86 04:16:46-MDT,1031;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 04:16:41-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a015039; 24 Jul 86 5:56 EDT
Received: from USENET by SMOKE.BRL.ARPA id a008693; 24 Jul 86 5:41 EDT
From: Stan Hanks <stan%drillsys.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Recent posting to na.forsale
Message-ID: <377@drillsys.UUCP>
Date: 23 Jul 86 06:57:30 GMT
Keywords: no adds here
To:       info-cpm@AMSAA.ARPA

I just finished posting a note to na.forsale announcing that I am
parting  with much of my CP/M equipment and software, various
S-100 boards, and  whole stacks of magazines. If you are interested
in acquiring same, I suggest you watch na.forsale for my note; if you
don't get na.forsale and are interested, drop me a line and I'll send
you a personal copy.


Stan Hanks					...!drillsys!stan
Sr. Research Scientist				stan@rice.ARPA
Teleco Oilfield Services, Drilling Systems Technology
Houston TX					(713) 699-5594
24-Jul-86 06:37:19-MDT,1270;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 06:36:42-MDT
Received: from crdc-vax3.arpa by AMSAA.ARPA id a000946; 24 Jul 86 8:06 EDT
Date:     Thu, 24 Jul 86 7:59:53 EDT
From:     "Jack H. Smith" <jhsmith@crdc-vax3.ARPA>
To:       Info-cpm@AMSAA.ARPA
Subject:  Peter Korn -- Superbrain

	
	Peter,

		I have an Intertech Compustar system, with a DSS-10, and
	several terminals. I use a version of MODEM730 on my micro that
	I installed myself, and wrote my own machine-specific overlay,
	(there must be hundreds out on Simtel20). I even sent Keith
	Petersen a copy of it. I've also got Xmodem on the vax system 
	we have (two versions...one that adds cr/lf for the PC community
	and one that doesn't add/subtract cr/lf, for the regular micro
	community.....if there is such a thing as a 'regular micro'.)

			I'm pretty sure that a model-30 Compustar is
	a pretty close approximation of a Superbrain. In fact, in 
	installing Wordstar, and DbaseII, and other packages, I 
	normally choose the superbrain selection and it all works 
	great.

			Let me know what you need. I've probably got it.
	I've even got a version of BYE for you.

					Yours Truly,


					Jack H. Smith


24-Jul-86 06:43:13-MDT,946;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 06:43:02-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a001295; 24 Jul 86 8:18 EDT
Received: from (PFENNIGE)CGEUGE51.BITNET by WISCVM.ARPA on 07/24/86 at
  06:36:20 CDT
Date: 24 JUL 86 13:21-N
From:  PFENNIGER%CGEUGE51.BITNET@WISCVM.ARPA
To:  INFO-CPM@AMSAA.ARPA
Subj: Commodore C128 disk formats

In reference to the questions regarding the ability of the Commodore 128
to read different disk formats. Well according to the manual it is capable
of reading the following formats:-
1) Epson Qx10
2) IBM-8 SS (cpm/86)
3) IBM-8 DS (cp/m86)
4) Kaypro II
5) Kaypro IV
6) Osborne DD.
The manual also says that it is capable of writing these formats also. As
for the terminal type I once saw a reference that if your choose either
ADM-3A or ADM-31 then you can't go wrong.
Brian Jarvis Observatoire de Geneve, Switzerland.
24-Jul-86 12:19:16-MDT,654;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 12:19:05-MDT
Received: from xerox.arpa by AMSAA.ARPA id a002550; 24 Jul 86 13:27 EDT
Received: from PinotNoir.ms by ArpaGateway.ms ; 24 JUL 86 10:22:08 PDT
Date: 24 Jul 86 10:20 PDT
From: ghenis.pasa@xerox.ARPA
Subject: Re: Plea for help (Superbrain to MS-DOS)
To: info-cpm@AMSAA.ARPA
Message-ID: <860724-102208-2663@Xerox>

Peter,

I forgot to mention that (if the Superbrain has a standard RS232 port)
you will need a null modem adaptor in line with your serial cable to do
port-to-port transfers. Radio Shack sells these adaptors.
24-Jul-86 14:22:57-MDT,956;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 24 Jul 86 14:22:44-MDT
Received: from ucb-vax.arpa by AMSAA.ARPA id a008128; 24 Jul 86 15:45 EDT
Received: by ucbvax.Berkeley.EDU (5.53/1.14)
	id AA19759; Thu, 24 Jul 86 12:43:50 PDT
Received: by ucdavis.UCDAVIS.EDU (4.12/4.7)
	id AA25950; Thu, 24 Jul 86 12:16:07 pdt
Received: by clover.ucdavis.edu (4.12/4.7)
	id AA01179; Thu, 24 Jul 86 12:16:08 pdt
Date: Thu, 24 Jul 86 12:16:08 pdt
From: Eric Hildum <ucdavis!clover!hildum@ucb-vax.ARPA>
Message-Id: <8607241916.AA01179@clover.ucdavis.edu>
To: ucdavis!info-cpm@AMSAA.ARPA, ucdavis!xerox.ARPA!ghenis.pasa@ucb-vax.ARPA
Subject: Re: Plea for help (Superbrain to MS-DOS)

Regarding Radio Shack null modem adaptors - you're much better off getting
a length of ribbon cable and two db25 connectors from the other side of the
store and building it yourself (for about $20 - $30 less).

				Eric
28-Jul-86 02:44:36-MDT,1453;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 02:44:28-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000221; 28 Jul 86 4:03 EDT
Received: from USENET by SMOKE.BRL.ARPA id a006326; 28 Jul 86 3:40 EDT
From: Jeff Sonstein <jeffs%quad1.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Re: Plea for help
Message-ID: <548@quad1.UUCP>
Date: 25 Jul 86 17:02:15 GMT
To:       info-cpm@AMSAA.ARPA

> 
> Does anyone out there have ANY ideas?  Also, where can I pick up
> a terminal program for my SuperBrain (and thus transfer via the
> serial port)?  And finally, does anyone out there have the
> pinouts for the SuperBrain?
> 
Main Port
Pin #			Assignment				Direction
=====			==========				=========
1			GND					-
2			Transmitted Data			Fm SB
3			Rec'd Data				To SB
4			RTS					Fm SB
5			CTS					To SB
6			DSR					To SB
7			GND					-
15			Transmit Clock				To SB
17			Rcv Clock				To SB
20			DTR					Fm SB
22			Ring Indicator				To SB
24			Clock					Fm SB

AUX PORT
========
1			GND					-
2			Rcv'd Data (NOTE)			To SB
3			Transmitted Data			Fm SB
7			GND					-
20			DTR					To SB


Jeff Sonstein					Quadratron Systems Inc.

UUCP: {sdcrdcf|ttdica|scgvaxd|mc0|bellcore|logico|ihnp4}!psivax!quad1!jeffs

--------------------
	
	"There is a hopeful symbolism in the fact that
	flags do not wave in a vacuum..."

		-- Arthur C. Clarke --

-- 
28-Jul-86 10:58:28-MDT,4177;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 10:57:41-MDT
Received: from ll.arpa by AMSAA.ARPA id a010973; 28 Jul 86 12:06 EDT
Date: Mon 28 Jul 1986 12:06:38 EDT
From: SAGE@LL.ARPA
MMDF-Warning:  Parse error in preceding line at AMSAA.ARPA
Subject: CP/M Text Editors
To: INFO-CPM@AMSAA.ARPA
Message-ID: <SAGE.20943595@LL.ARPA>

  Urs Zurbuchen asked for information about a public-domain text editor for 
P/M with a rather impressive list of requirements.  The only public-domain 
ditors I know of are rather simple beasts, and the only programs that come 
lose to Zurbuchen's list of requirements are two commercial programs, PMATE 
nd VEDIT.  I am familiar with PMATE, the original editor of this type.  
EDIT is quite similar.  Here is how it matches up to those requirements:
 
 small and fast: PMATE is a little over 20K long (exact size depends on 
  user configuration choices, principally the size of the permanent macro 
  area.  PMATE is particularly fast, since it gives proper priority to 
  keyboard input over its own screen output.
 
 support for memory-mapped video: PMATE does this very nicely (that is how 
  I use it).
 
 multiple file editing: PMATE has a total of 11 editing buffers, all of 
  which can contain text from files or macro commands.  Commands allow text 
  to be transfered in various ways between the buffers.
 
 arbitrary file size: The main text buffer in PMATE supports disk buffering 
  of files and thus can handle files of arbitrary length (limited by disk 
  space).  Source, destination, and temporary files can each be on a 
  separate drive so that the longest file that can be edited is limited to 
  the full capacity of a drive.
 
 key-to-command binding: Here PMATE really shines.  First, PMATE not only 
  binds individual keys but recognizes sequences of keys and assigns them to 
  commands.  Secondly, the commands to which key sequences are bound include 
  not only the built-in functions that PMATE comes with but also user-
  written functions, written using the interpreted macro command language 
  (TECO-like).  These user-written macros are stored in what is called the 
  permanent macro area (PMA).  After the PMA has been updated, PMATE's clone 
  function is used to save a new version of the editor.
 
 macros: PMATE has an unbelievably complete macro capability.  There are 
  user variables and system variables that tell one almost everything about 
  the environment (current line and column, current buffer number, the value 
  of the character under the cursor, the next tab stop, the amount of memory 
  left, the absolute memory address of the cursor, and many, many more).  
  Fully structured iteration is supported (if-then-else, do-until, do-while, 
  repeat).  I cannot begin to describe all the features here.  Suffice it to 
  say that the hooks are present to do just about anything one can imagine.  
  Without access to any source code, I made a version of PMATE that is 
  ZCPR3-compatible (supports file access using the DU: -- drive/user -- 
  format).
 
 auto-indent: PMATE supports automatic indentation for writing in languages 
  such as C and Pascal.  The macro languages give full support and control 
  to auto-indentation.
 
 overlays: PMATE is complete in one COM file.
 
 clean screen: PMATE shows only the information you really need to know -- 
  the names of open files, the current editing buffer, the value of a 
  numerical argument returned by a macro, and the cursor position (line and 
  column).
 
f anyone wants more information about PMATE, I would welcome their 
nquiries, since I am probably the most active supporter around of the 8-bit 
ersion of PMATE (there are 16-bit versions, too).  A special section (with 
estricted access) of my remote access system, the Newton Z-Node 
617-965-7259, pw=DDT), is devoted to PMATE support.  It includes a bulletin 
oard with suggestions and tips on exploiting PMATE's capabilities and an 
xtensive collection of macros.
 
                                       Jay Sage (SAGE @ LL)
 

28-Jul-86 12:15:53-MDT,1217;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 12:15:24-MDT
Received: from nprdc.arpa by AMSAA.ARPA id a013026; 28 Jul 86 13:15 EDT
Received: from hull.nprdc.arpa (hull.ARPA) by nprdc.arpa (4.12/ 1.1)
	id AA06788; Mon, 28 Jul 86 10:15:55 pdt
Return-Path: <lim@hull>
Received: by hull.nprdc.arpa (2.2/SMI-2.0)
	id AA09151; Mon, 28 Jul 86 10:12:15 pdt
From: Bill Lim <@nprdc.arpa:lim@hull>
Message-Id: <8607281712.AA09151@hull.nprdc.arpa>
Date: 28 July 1986 1010-PDT (Monday)
To: INFO-CPM@AMSAA.ARPA
Subject: RE: P/D CP/M Text Editors

	Urs Zurbuchen,

	Several months ago, Bruce E. Wampler of the University of New
	Mexico submitted a public domain full-screen editor to
	mod.sources called 'tvx.' TVX is written in C, and is
	availiable for UNIX, MS-DOS, and CP/M.  I have not used it on a
	CP/M machine, but have got it running on an IBM/XT with little
	trouble. It is a very complete package, with source and user
	manuals. The documentation claims vi and emacs emulation is also
	possible.


		Bill

ARPA:		lim@nprdc.arpa

UUCP:		ihnp4   \
		akgua    \
		decvax    >---- !sdcsvax!sdics!nprdc!lim
		dcdwest  /
		ucbvax  /
28-Jul-86 13:09:29-MDT,1182;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 13:09:13-MDT
Received: from decwrl.arpa by AMSAA.ARPA id a014394; 28 Jul 86 14:01 EDT
Received: from DEC-RHEA.ARPA (dec-rhea) by decwrl.DEC.COM (4.22.05/4.7.34)
	id AA28390; Mon, 28 Jul 86 10:59:23 pdt
Message-Id: <8607281759.AA28390@decwrl.DEC.COM>
Date: 28-Jul-1986 1333
From: "Sink me! 'Twas lovely, havin' this little chat!" <binder%asd.DEC@dec.ARPA>
To: info-cpm@AMSAA.ARPA, net.micro.cpm%asd.DEC@dec.ARPA
Subject: For sale, please respond directly to me

For sale, some stuff I bought in a lot and can't use on my Apple:

For a Xerox 820 with 8" disks:

1.  WordStar 3.0, with docs and training guide.
2.  CalcStar 1.0, with docs.
3.  CP/M 2.2, with docs.
4.  820 Diagnostic Exerciser disk, no docs.
5.  820 printer interface disk 1.0 (appears to be for daisywheel).
6.  820 hands-on training session manual.

All for $75.00 or, failing that, best offer tha passes my reason-
ableness test.

Cheers,
Dick Binder   (The Stainless Steel Rat)

UUCP:  { decvax, allegra, ucbvax... }!decwrl!asd.dec.com!binder
ARPA:  binder%asd.DEC@decwrl.ARPA

28-Jul-86 21:29:49-MDT,1099;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Mon 28 Jul 86 21:29:41-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000312; 28 Jul 86 21:56 EDT
Received: from USENET by SMOKE.BRL.ARPA id a012549; 28 Jul 86 21:44 EDT
From: binder@asd.dec.com
Newsgroups: net.micro.cpm
Subject: For sale, please respond directly to me
Message-ID: <4449@decwrl.DEC.COM>
Date: 28 Jul 86 17:59:41 GMT
Sender: daemon@dec.ARPA
To:       info-cpm@AMSAA.ARPA

For sale, some stuff I bought in a lot and can't use on my Apple:

For a Xerox 820 with 8" disks:

1.  WordStar 3.0, with docs and training guide.
2.  CalcStar 1.0, with docs.
3.  CP/M 2.2, with docs.
4.  820 Diagnostic Exerciser disk, no docs.
5.  820 printer interface disk 1.0 (appears to be for daisywheel).
6.  820 hands-on training session manual.

All for $75.00 or, failing that, best offer tha passes my reason-
ableness test.

Cheers,
Dick Binder   (The Stainless Steel Rat)

UUCP:  { decvax, allegra, ucbvax... }!decwrl!asd.dec.com!binder
ARPA:  binder%asd.DEC@decwrl.ARPA
29-Jul-86 06:39:20-MDT,762;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 06:39:13-MDT
Received: from crdc-vax3.arpa by AMSAA.ARPA id a002893; 29 Jul 86 8:02 EDT
Date:     Tue, 29 Jul 86 7:53:33 EDT
From:     "Jack H. Smith" <jhsmith@crdc-vax3.ARPA>
To:       binder%asd.DEC@DECWRL.ARPA
cc:       Info-cpm@AMSAA.ARPA
Subject:  For sale

	
	Dear Mr. 'Stainless Steel Rat',

		While your prices seem much more than reasonable,
	the mailing list is not your private want-ads section in
	your daily newspaper. This subject has been discussed,
	and re-discussed, and the concensus is that any for-sale
	items (messages) are not to be placed on the list.

				Sorry to rain on your parade,
			
				Jack H. Smith


29-Jul-86 09:40:01-MDT,4235;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 09:39:46-MDT
Received: from ll.arpa by AMSAA.ARPA id a006882; 29 Jul 86 9:49 EDT
Date: Tue 29 Jul 1986 09:48:59 EDT
From: SAGE@LL.ARPA
MMDF-Warning:  Parse error in preceding line at AMSAA.ARPA
Subject: Text Editors
To: INFO-CPM@AMSAA.ARPA
Message-ID: <SAGE.21035277@LL.ARPA>

   Urs Zurbuchen asked for information about a public-domain text editor for 
CP/M with a rather impressive list of requirements.  The only public-domain 
editors I know of are rather simple beasts, and the only programs that come 
close to Zurbuchen's list of requirements are two commercial programs, PMATE 
and VEDIT.  I am familiar with PMATE, the original editor of this type.  
VEDIT is quite similar.  Here is how it matches up to those requirements:
 
1. small and fast: PMATE is a little over 20K long (exact size depends on 
   user configuration choices, principally the size of the permanent macro 
   area.  PMATE is particularly fast, since it gives proper priority to 
   keyboard input over its own screen output.
 
2. support for memory-mapped video: PMATE does this very nicely (that is how 
   I use it).
 
3. multiple file editing: PMATE has a total of 11 editing buffers, all of 
   which can contain text from files or macro commands.  Commands allow text 
   to be transfered in various ways between the buffers.
 
4. arbitrary file size: The main text buffer in PMATE supports disk buffering 
   of files and thus can handle files of arbitrary length (limited by disk 
   space).  Source, destination, and temporary files can each be on a 
   separate drive so that the longest file that can be edited is limited to 
   the full capacity of a drive.
 
5. key-to-command binding: Here PMATE really shines.  First, PMATE not only 
   binds individual keys but recognizes sequences of keys and assigns them to 
   commands.  Secondly, the commands to which key sequences are bound include 
   not only the built-in functions that PMATE comes with but also user-
   written functions, written using the interpreted macro command language 
   (TECO-like).  These user-written macros are stored in what is called the 
   permanent macro area (PMA).  After the PMA has been updated, PMATE's clone 
   function is used to save a new version of the editor.
 
6. macros: PMATE has an unbelievably complete macro capability.  There are 
   user variables and system variables that tell one almost everything about 
   the environment (current line and column, current buffer number, the value 
   of the character under the cursor, the next tab stop, the amount of memory 
   left, the absolute memory address of the cursor, and many, many more).  
   Fully structured iteration is supported (if-then-else, do-until, do-while, 
   repeat).  I cannot begin to describe all the features here.  Suffice it to 
   say that the hooks are present to do just about anything one can imagine.  
   Without access to any source code, I made a version of PMATE that is 
   ZCPR3-compatible (supports file access using the DU: -- drive/user -- 
   format).
 
7. auto-indent: PMATE supports automatic indentation for writing in languages 
   such as C and Pascal.  The macro languages give full support and control 
   to auto-indentation.
 
8. overlays: PMATE is complete in one COM file.
 
9. clean screen: PMATE shows only the information you really need to know -- 
   the names of open files, the current editing buffer, the value of a 
   numerical argument returned by a macro, and the cursor position (line and 
   column).
 
If anyone wants more information about PMATE, I would welcome their 
inquiries, since I am probably the most active supporter around of the 8-bit 
version of PMATE (there are 16-bit versions, too).  A special section (with 
restricted access) of my remote access system, the Newton Z-Node 
(617-965-7259, pw=DDT), is devoted to PMATE support.  It includes a bulletin 
board with suggestions and tips on exploiting PMATE's capabilities and an 
extensive collection of macros.
 
                                        Jay Sage (SAGE @ LL)
 

29-Jul-86 11:32:52-MDT,1624;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 11:32:29-MDT
Received: from cmu-cs-maps.arpa by AMSAA.ARPA id a011353; 23 Jul 86 17:27 EDT
Date: Wednesday, 23 July 1986 16:23:19 EDT
From: Stephen.Jenks@cmu-cs-maps.ARPA
To: info-cpm-request@AMSAA.ARPA
Subject: Emacs-like editor wanted
Message-ID: <1986.7.23.20.11.48.Stephen.Jenks@maps.cs.cmu.edu>
Distribution: net
Organization: Carnegie Mellon Computer Science
Resent-Date:  Tue, 29 Jul 86 12:46:14 EDT
Resent-From:  cpmlist@AMSAA.ARPA
Resent-To:    info-cpm@cmu-cs-maps.ARPA

(I sure hope this gets out to the net!)

I keep seeing all these announcements of MicroEmacs for all sorts of
operating systems, and am getting pretty jealous of MS-DOS people, since I run
CP/M.  Has anyone succeeded (or even tried) to convert MicroEmacs to CP/M?

I need a good editor.  I've used The Final Word, but it just isn't as good
as Emacs, and it limits the size of files to less than the size of its swap
file.  No good!  So I must use WordStar for editting long programs -- no
good either.  Are there any good editors out there that let you edit big
files?

						Thanks a lot,
						Steve Jenks

uucp:	...!seismo!maps.cs.cmu.edu!sfj
arpa:	sfj@maps.cs.cmu.edu
bitnet:	jenks@cmuccvc or sj0k@cmuccvma

p.s.  Anyone have a UO-Lisp manual.  I bought UO-Lisp a long time ago, and
never got a manual (pretty useless, huh?) and now the company doesn't
respond to my letters.  Every company I buy anything from seems to go out of
business!  Maybe I should buy an IBM PC and they would go under...
29-Jul-86 13:16:31-MDT,1325;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 13:16:03-MDT
Received: from rand-unix.arpa by AMSAA.ARPA id a000589; 29 Jul 86 14:28 EDT
Received: by rand-unix.ARPA; Tue, 29 Jul 86 10:06:12 pdt
Message-Id: <8607291706.AA17570@rand-unix.ARPA>
To: info-cpm@AMSAA.ARPA
Cc: bridger@RAND-UNIX.ARPA, SAGE@LL.ARPA
Subj: zcpr3 path puzzle
Date: Tue, 29 Jul 86 10:05:54 PDT
From: bridger@RAND-UNIX.ARPA

In ZCPR3, v. 3.0 and v. 3.14, the path-search code does
something I haven't seen explained -- it masks the high bit
of the user-number byte (and also, if the minpath option is used)
the drive byte found in the path.

From the comments with the code I am guessing that the intent was to
use the hi bit in the path to specify directories (drive/user pairs)
that "hide" non-system files.  For example, if the path element for
A3: has bit 7 set, then files in A3: which do not have the
system-attribute bit set would not be found by (1) the .com file
loader, and (2) the DIR command.  However, the code doesn't really do
this, at least if the minpath option is used.

Does anyone know: is this the intent?  does anyone use a path with hi
bits set?  Do the z3 tools and syslib routines behave correctly when
a path contains a hi bit?

--bridger


29-Jul-86 18:24:43-MDT,703;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Tue 29 Jul 86 18:24:37-MDT
Received: from ucb-vax.arpa by AMSAA.ARPA id a003781; 29 Jul 86 15:42 EDT
Received: by ucbvax.Berkeley.EDU (5.53/1.14)
	id AA19055; Tue, 29 Jul 86 12:43:03 PDT
Received: by ucdavis.UCDAVIS.EDU (4.12/4.7)
	id AA15471; Tue, 29 Jul 86 12:32:10 pdt
Received: by clover.ucdavis.edu (4.12/4.7)
	id AA01352; Tue, 29 Jul 86 12:31:58 pdt
Date: Tue, 29 Jul 86 12:31:58 pdt
From: Eric Hildum <ucdavis!clover!hildum@ucb-vax.ARPA>
Message-Id: <8607291931.AA01352@clover.ucdavis.edu>
To: ucdavis!Info-cpm@AMSAA.ARPA
Subject: Re For sale


Where is the appropriate forum?

			Eric
30-Jul-86 02:03:04-MDT,622;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 02:02:59-MDT
Received: from mit-mc.arpa by AMSAA.ARPA id a000671; 30 Jul 86 3:31 EDT
Date: Wed 30 Jul 86 03:30:39-EDT
From: Mark Becker <Cent.Mbeck%OZ.AI.MIT.EDU@mit-xx.ARPA>
Subject: TVX source code?
To: Info-CPM@AMSAA.ARPA
Message-ID: <12226740342.69.CENT.MBECK@OZ.AI.MIT.EDU>

[I just found out the line eater still lives!]

I've seen mention of the TVX editor and am interested in obtaining a
copy of the source code.  Anyone have a copy I can FTP or otherwise
get ahold of?

Mark Becker
-------
30-Jul-86 10:19:21-MDT,1121;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 10:19:13-MDT
Received: from nadc.arpa by AMSAA.ARPA id a004422; 30 Jul 86 11:36 EDT
Date: 30 Jul 1986 08:20:38-EDT
From: prindle@nadc.ARPA
To: Cent.Mbeck@oz.ai.mit.edu, mit-xx@nadc.ARPA, info-cpm@AMSAA.ARPA
MMDF-Warning:  Parse error in preceding line at AMSAA.ARPA
Subject: whereabouts of TVX editor source code

Dr. Bruce Wampler's TVX editor is alive and well on SIMTEL20 in the directory
PD:<MSDOS.TVX-EDITOR>.  Flip a few #defines, and it will (or used to) compile
for CP/M.  Problem is, if this is the latest and greatest version with "vi"
and "emacs" modes, it probably won't fit into a typical CP/M TPA.  I compiled
an older version (with "native TVX" command mode only) for CP/M 3.0 with a 
58K TPA and wound up with about a 15K working buffer; much less than that and
you'd end up buffering to disk all the time.  I have the source code to this
older version, if indeed someone does try to compile the newer one for CP/M and
it is too big.  
Sincerely,
Frank Prindle
Prindle@NADC.arpa
30-Jul-86 12:20:37-MDT,727;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 12:20:28-MDT
Received: from wiscvm.arpa by AMSAA.ARPA id a007724; 30 Jul 86 13:14 EDT
Received: from (TTTLEH5)NEUVM1.BITNET by WISCVM.ARPA on 07/30/86 at
  08:25:40 CDT
Date: Wed, 30 Jul 86 15:10:50 DNT
To:  info-cpm@AMSAA.ARPA
From:  TTTLEH5%NEUVM1.BITNET@WISCVM.ARPA
Subject: Re: The TVX editor's source ...

            Hello out there in the cp/m world.

If anyone get the source to the TVX editor, can I then get a copy too ?
Or even better: Mail it to the list. Please don't include uuencoded
non-binary files, since they are unuseable for EARN/BITNET users.

               Klaus Emlquist Nielsen.
30-Jul-86 23:54:50-MDT,1094;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Wed 30 Jul 86 23:54:01-MDT
Received: from ucb-vax.arpa by AMSAA.ARPA id a017647; 31 Jul 86 1:24 EDT
Received: by ucbvax.Berkeley.EDU (5.53/1.14)
	id AA12591; Wed, 30 Jul 86 14:47:24 PDT
Received: by ucdavis.UCDAVIS.EDU (4.12/4.7)
	id AA09671; Wed, 30 Jul 86 14:15:16 pdt
Received: by clover.ucdavis.edu (4.12/4.7)
	id AA11813; Wed, 30 Jul 86 14:14:16 pdt
Date: Wed, 30 Jul 86 14:14:16 pdt
From: Eric Hildum <ucdavis!clover!hildum@ucb-vax.ARPA>
Message-Id: <8607302114.AA11813@clover.ucdavis.edu>
To: ucdavis!info-cpm@AMSAA.ARPA
Subject: Arpa net restrictions

I would like to thank those people who took the time to point out the 
restrictions on the use of Arpa net regarding the for sale message that
appeared several days ago.  However, it does appear that I do need to 
make one thing clear - it was not me who put in the advertisement - I 
only asked if there was an appropriate forum.  As there is not through
this channel, that answers that.

			Eric "All I did was ask!" 
31-Jul-86 10:25:35-MDT,1226;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 10:25:07-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a001863; 31 Jul 86 11:50 EDT
Received: from USENET by SMOKE.BRL.ARPA id a029220; 31 Jul 86 11:43 EDT
From: Thomas Almy <toma%tekgvs.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: Re: Emacs-like editor wanted
Message-ID: <1654@tekgvs.UUCP>
Date: 30 Jul 86 14:15:26 GMT
To:       info-cpm@AMSAA.ARPA

In article <2643@brl-smoke.ARPA> Stephen.Jenks@cmu-cs-maps.ARPA writes:
>I keep seeing all these announcements of MicroEmacs for all sorts of
>operating systems, and am getting pretty jealous of MS-DOS people, since I run
>CP/M.  Has anyone succeeded (or even tried) to convert MicroEmacs to CP/M?
>
>I need a good editor.  I've used The Final Word, but it just isn't as good
>as Emacs, and it limits the size of files to less than the size of its swap
>file.  No good! ... 

Unfortunately, MicroEmacs keeps the file memory resident (allowing about 29k
of buffers with 8086 "small memory model", figure about 20k with CP/M-80).
I use Mince (like Final Word) and devote a ram disk to the swap file.  Works
great.

Tom Almy
Tektronix
31-Jul-86 18:08:10-MDT,39743;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 18:06:20-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000382; 31 Jul 86 17:44 EDT
Received: from USENET by SMOKE.BRL.ARPA id a004313; 31 Jul 86 17:41 EDT
From: Michael Kersenbrock <michaelk%copper.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: MAKE for CPM 3.0 part 1 of 2
Message-ID: <513@copper.UUCP>
Date: 31 Jul 86 07:23:23 GMT
Keywords: cpm, make
To:       info-cpm@AMSAA.ARPA

<-------------->
This is a make (clone) program for cp/m 3.0. It is a better version
than the one I posted earlier.  This make program was recently posted
on USENET for "EON" (??).  I have "ported" this program to CP/M,
and it seems to work well.  This one has macros and rules (which
the earlier one I posted did not).

Below is the source and man files. Part two (posted separately) contains
the uuencoded version of the make.com (z80) binary.  This binary
was generated via compilation with Manx Aztec C II version 1.05g.
I have "enhanced" my compiler library continuously over the last several
years, and don't always remember what was originally there and what it
is that which I added myself.  I hope porting my port doesn't cause too many
problems for those that may want to recompile the source.

Enjoy...

Mike Kersenbrock
...!tektronix!copper!michaelk


#	This is a shell archive.
#	Remove everything above and including the cut line.
#	Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar:    Shell Archiver
#	Run the following text with /bin/sh to create:
#	MAKE.DOC
#	MAKEFILE
#	MAKE.C
#	CHECK.C
#	INPUT.C
#	MACRO.C
#	MAIN.C
#	READER.C
#	RULES.C
#	H.H
# This archive created: Wed Jul 30 23:44:42 1986
# By:	Michael D. Kersenbrock (Oregon HomePower Software)
echo shar: extracting make.doc
cat << \SHAR_EOF > make.doc


  MAKE(CPM+)						       MAKE(CPM+)

	
	SYNTAX

		make [-f makefile] [-nprst] [macro=val ...] [target(s) ...]

	WHERE

		-i means don't continue if an error is encountered

		-f specifies that the following argument is the name of
		   a makefile to be used instead of default "MAKEFILE.DAT"
		   or "MAKEFILE".

		-n means don't execute the commands, just write the ones that
		   would be executed to the standard output. 

		-p Print all macros & targets

		-r Do not use inbuilt rules

		-s Make silently

		-t Touch files instead of making them

	"macro" -  is a macro name, and...

	  "val" -  is the string value to set it to.  Use quotes around
	           the "macro=val" if there are imbedded spaces.


	DESCRIPTION

		This program is a slightly simplified clone of the UNIX
		(tm of AT&T) utility of the same name.  Dependancy
		information is extracted from a makefile and acted upon.

		This version requires CP/M-80 version 3.0 ("CP/M PLUS")
		with time-of-day-clock implemented.  Also the file timestamps
		must be "turned on". Current time-of-day call to CP/M is
	        also used.  Note that "CP/M" is a trademark of Digital
	 	Research.



	MAKEFILE FORMAT

		For general usage, refer to a UNIX(tm) man-page.

	        "Make" without parameters makes the first target in the
		makefile.

		The default name of the 'makefile' is 'MAKEFILE.DAT'
		or 'MAKEFILE' in that order.  If the '-f' option is used,
		the default makefile is not processed.
	
		Any blank lines in the 'makefile(s)' are ignored, as are
		lines that have a "#" in the first column.




  MAKE(CPM+)			-2-			   MAKE(CPM+)

	
	
	 	Lines starting with a tab character are 'howto'
		lines, and consist of a command name followed by arguments.

		Any other line is a 'dependency' line.  'Dependency'
		lines consist of a filename followed by a (possibly empty)
		list of dependent filenames.  A colon is required after
		the target filename.
	
	 	'Howto' lines apply to the most	recently preceding 
		'dependency' line.  It is improper for 	a 'howto' line
		 to precede the first 'dependency' line.

		Lines ending with "\" join the next-line to the current
		one with all but one-character of the next-line's leading
		whitespace removed.


	SIDE EFFECTS

		This program works by producing a temporary file "MAKE@@@.SUB"
		then chaining to it for execution of the command list.  This
		file then deletes itself upon successful completion.  Should
		the execution be aborted, then this file will remain
		in the file system (but will not harm later invocations of
		make).

		Everything has been made case-independent (CP/M forces command
		lines upper case.  That makes this case-independence a
		requirement.)

        BUGS
		The -i option is opposite of "normal" so that error codes
		are normally ignored.  If the -i option is used, colons
		will proceed commands that aren't to execute after an
		error.  This sortof almost works in CP/M Plus.  To be
		made to work three things need to be done. 1) an RSX
		written that makes a compiler(etc) set the error flag (should
		be easy to do). 2) Keep CP/M 3.0 and/or the CCP from resetting
		the error flag on each command that is executed (patch
		somewhere?), and 3) Let the ":" exclusion work in front
		of .SUB files as well as .COM files (patch somewhere?).
		Discription of the ":" is in the CP/M Plus Programmer's
		Guide in the description of bdos function 108.





  MAKE(CPM+)			-3-			    MAKE(CPM+)

	
	
	RULES
		The built in rules currently are these:
		
		".o" files depend on ".c" files and are made by:
			$(CCC) $(CFLAGS) $(CWHICH)
			
			where:
				CCC    = cc-c   (mdk's submit file)
				CFLAGS = 	(they are in cc-c.sub)
				CWHICH = $*     (target's basename)


		".rel" files depend on ".asm" files and are made by:
			$(ASM) $(ASMWHICH) $(ASMFLAGS)

			where:
				ASM      = rmac
				ASMWHICH = $*
				ASMFLAGS = $$PZ SZ

		Note: These macros can be redefined in the makefile.



	AUTHOR

		Originally written for "EON" (whatever that is).
		This program was originally posted by, and presumably
		written by:

		   Neil Russell
		   Organization: TIME. Office Computers, Sydney, Australia
		   UUCP:  ...!seismo!munnari!tictoc.oz!caret
		
		The port to CP/M 3.0 consists of numerous small and medium
		modifications seemingly everywhere. That plus the generation
		of this psuedo-man page was done by:

		   Michael D. Kersenbrock
		   Aloha, Oregon
		   UUCP: ...!tektronix!copper!michaelk


SHAR_EOF
if test 4453 -ne "`wc -c make.doc`"
then
echo shar: error transmitting make.doc '(should have been 4453 characters)'
fi
echo shar: extracting makefile
cat << \SHAR_EOF > makefile
#
# This is for "make.com" itself (under CP/M-80 V3.0)
#

OBJS	=	make.o check.o input.o macro.o main.o reader.o rules.o

make.com:	$(OBJS)
		linkc $(OBJS)

$(OBJS):	h.h
SHAR_EOF
if test 169 -ne "`wc -c makefile`"
then
echo shar: error transmitting makefile '(should have been 169 characters)'
fi
echo shar: extracting make.c
cat << \SHAR_EOF > make.c
/*
 *	Do the actual making for make
 */

#include "c:stdio.h"		/* "c:" is my ramdisk */
#include "c:fcntl.h"
#include "h.h"

FILE *execfile;		/* Submit file to execute the "shell-exec's" */

extern long ftime();

/*
 *	Exec a shell that returns exit status correctly (/bin/esh).
 *	The standard EON shell returns the process number of the last
 *	async command, used by the debugger (ugg).
 *	[exec on eon is like a fork+exec on unix]
 */
int
dosh(command, args)
char *command;
char *args;
{
	if (!execfile) {
		execfile = fopen(MAKERUN, "w");
		if (!execfile) {
			errout("Make: can't create ");
			errout(MAKERUN);
			errout("\r\n");
			exit(-1);
		}
	}

	fprintf(execfile, "%s %s", command, args);
	return 0;
}


/*
 *	Do commands to make a target
 */
void
docmds(np)
struct name *		np;
{
	bool			ssilent;
	bool			signore;
	int			estat;
	register char *		q;
	register char *		p;
	char *			shell;
	register struct line *	lp;
	register struct cmd *	cp;
	ssilent = silent;

	/*
	 * Under cp/m the "ignore or not to ignore" is sorta done in dosh()
	 * where colons are inserted or not into the cp/m submit file.
	 * The actual ignoring (or not) is done when cpm 3.0's submit
	 * program executes the submit file.
	 *
	 *					-mdk
	 */

	signore = ignore;

	if (*(shell = getmacro("SHELL")) == '\0')
		shell = ":bin/esh";

	for (lp = np->n_line; lp; lp = lp->l_next)
		for (cp = lp->l_cmd; cp; cp = cp->c_next)
		{
			strcpy(str1, cp->c_cmd);
			expand(str1);
			q = str1;
			while ((*q == '@') || (*q == '-'))
			{
				if (*q == '@')	   /*  Specific silent  */
					ssilent = TRUE;
				else		   /*  Specific ignore  */
					signore = TRUE;
				q++;		   /*  Not part of the command  */
			}

			if (!ssilent)
				fputs("   ", stdout);

			if ((!ssilent) && (!signore)) {	/* cp/m stuff */
				putchar(':');
				putchar(' ');
			}
			for (p=q; *p; p++)
			{
				if (*p == '\n' && p[1] != '\0')
				{
					*p = ' ';
					if (!ssilent)
						fputs("\\\n", stdout);
				}
				else if (!ssilent)
					putchar(*p);
			}
			if (!ssilent)
				putchar('\n');

			if (domake)
			{			/*  Get the shell to execute it  */
				/*
				 * Colon in front of line makes execution
				 * conditional on error code in cp/m 3.0 .
				 * (Sortof, with one "minor" problem)
				 */

				if (!signore)	
					dosh(":","");
				
				if ((estat = dosh(q,"\n")) != 0)
				{
					if (estat == -1)
						fatal("Couldn't execute %s", shell);
					else
					{
						printf("%s: Error code %d", myname, estat);
						if (signore)
							fputs(" (Ignored)\n", stdout);
						else
						{
							putchar('\n');
							if (!(np->n_flag & N_PREC))
								if (unlink(np->n_name) == 0)
									printf("%s: '%s' removed.\n", myname, np->n_name);
							exit(estat);
						}
					}
				}
			}
		}
}



/*
 *	Update the mod time of a file to now.
 */
void
touch(np)
struct name *		np;
{
	char			c;
	int			fd;
	char fcb[36];			/* set area for CP/M fcb */
	char tempbuffer[128];		/* CPM record size */


	if (!domake || !silent)
		printf("    touch %s\n", np->n_name);

	if (domake)  {
		if ((fd=open(np->n_name,O_RDONLY)) < 0 ) {
			printf("%s: '%s' not touched - non-existant\n",
					myname, np->n_name);
		}
		else {
			close(fd);
			OpenRandomFile(np->n_name,fcb);   /* open file      */
			ReadRandomFile(tempbuffer,0,fcb); /* read record    */
			WriteRandomFile(tempbuffer,0,fcb); /* write it back */
		}
		CloseRandomFile(fcb);
	}
}


/*
 *	Recursive routine to make a target.
 */
int
make(np, level)
struct name *		np;
int			level;
{
	register struct depend *	dp;
	register struct line *		lp;
	time_t				dtime = 1l;


	if (np->n_flag & N_DONE)
		return 0;

	if (!np->n_time) {
		np->n_time = ftime(np->n_name);/*  Gets modtime of this file*/
	}

	if (rules) {
		for (lp = np->n_line; lp; lp = lp->l_next)
			if (lp->l_cmd)
				break;
		if (!lp)
			dyndep(np);
	}

	if (!(np->n_flag & N_TARG) && np->n_time == 0L)
		fatal("Don't know how to make %s", np->n_name);

	for (lp = np->n_line; lp; lp = lp->l_next)
		for (dp = lp->l_dep; dp; dp = dp->d_next)
		{
			make(dp->d_name, level+1);
			dtime = max(dtime, dp->d_name->n_time);
		}

	np->n_flag |= N_DONE;

	if (quest)
	{
		time(&np->n_time);  	/* used to be rtime() zzz */
		return np->n_time < dtime;
	}
	else if (np->n_time < dtime)
	{
		if (dotouch)
			touch(np);
		else
		{
			setmacro("@", np->n_name);
			docmds(np);
		}
		time(&np->n_time); 	/* used to be rtime() zzz */
	}
	else if (level == 0)
		printf("%s: '%s' is up to date\n", myname, np->n_name);
	return 0;
}
SHAR_EOF
if test 4491 -ne "`wc -c make.c`"
then
echo shar: error transmitting make.c '(should have been 4491 characters)'
fi
echo shar: extracting check.c
cat << \SHAR_EOF > check.c
/*
 *	Check structures for make.
 */

#include "c:stdio.h"
#include "h.h"


/*
 *	Prints out the structures as defined in memory.  Good for check
 *	that you make file does what you want (and for debugging make).
 */
void
prt()
{
	register struct name *		np;
	register struct depend *	dp;
	register struct line *		lp;
	register struct cmd *		cp;
	register struct macro *		mp;


	for (mp = macrohead; mp; mp = mp->m_next)
		fprintf(stderr, "%s = %s\n", mp->m_name, mp->m_val);

	fputc('\n', stderr);

	for (np = namehead.n_next; np; np = np->n_next)
	{
		fprintf(stderr, "%s:\n", np->n_name);
		for (lp = np->n_line; lp; lp = lp->l_next)
		{
			fputc(':', stderr);
			for (dp = lp->l_dep; dp; dp = dp->d_next)
				fprintf(stderr, " %s", dp->d_name->n_name);
			fputc('\n', stderr);

			for (cp = lp->l_cmd; cp; cp = cp->c_next)
				fprintf(stderr, "-\t%s\n", cp->c_cmd);
			fputc('\n', stderr);
		}
		fputc('\n', stderr);
	}
}


/*
 *	Recursive routine that does the actual checking.
 */
void
check(np)
struct name *		np;
{
	register struct depend *	dp;
	register struct line *		lp;


	if (np->n_flag & N_MARK)
		fatal("Circular dependency from %s", np->n_name);

	np->n_flag |= N_MARK;

	for (lp = np->n_line; lp; lp = lp->l_next)
		for (dp = lp->l_dep; dp; dp = dp->d_next)
			check(dp->d_name);

	np->n_flag &= ~N_MARK;
}


/*
 *	Look for circular dependancies.
 *	ie.
 *		a: b
 *		b: a
 *	is a circular dep
 */
void
circh()
{
	register struct name *	np;


	for (np = namehead.n_next; np; np = np->n_next)
		check(np);
}


/*
 *	Check the target .PRECIOUS, and mark its dependentd as precious
 */
void
precious()
{
	register struct depend *	dp;
	register struct line *		lp;
	register struct name *		np;


	if (!((np = newname(".PRECIOUS"))->n_flag & N_TARG))
		return;

	for (lp = np->n_line; lp; lp = lp->l_next)
		for (dp = lp->l_dep; dp; dp = dp->d_next)
			dp->d_name->n_flag |= N_PREC;
}
SHAR_EOF
if test 1895 -ne "`wc -c check.c`"
then
echo shar: error transmitting check.c '(should have been 1895 characters)'
fi
echo shar: extracting input.c
cat << \SHAR_EOF > input.c
/*
 *	Parse a makefile
 */


#include "c:stdio.h"
#include "h.h"

extern int endoffile;

struct name		namehead;
struct name *		firstname;

char 			str1[LZ];		/*  General store  */
char			str2[LZ];


/*
 *	Intern a name.  Return a pointer to the name struct
 */
struct name *
newname(name)
char *			name;
{
	register struct name *	rp;
	register struct name *	rrp;
	register char *		cp;


	for
	(
		rp = namehead.n_next, rrp = &namehead;
		rp;
		rp = rp->n_next, rrp = rrp->n_next
	)
		if (no_case_cmp(name, rp->n_name) == 0)
			return rp;

	if ((rp = (struct name *)malloc(sizeof (struct name)))
				== (struct name *)0)
		fatal("No memory for name");
	rrp->n_next = rp;
	rp->n_next = (struct name *)0;
	if ((cp = malloc(strlen(name)+1)) == (char *)0)
		fatal("No memory for name");
	strcpy(cp, name);
	rp->n_name = cp;
	rp->n_line = (struct line *)0;
	rp->n_time = (time_t)0;
	rp->n_flag = 0;

	return rp;
}


/*
 *	Add a dependant to the end of the supplied list of dependants.
 *	Return the new head pointer for that list.
 */
struct depend *
newdep(np, dp)
struct name *		np;
struct depend *		dp;
{
	register struct depend *	rp;
	register struct depend *	rrp;


	if ((rp = (struct depend *)malloc(sizeof (struct depend)))
				== (struct depend *)0)
		fatal("No memory for dependant");
	rp->d_next = (struct depend *)0;
	rp->d_name = np;

	if (dp == (struct depend *)0)
		return rp;

	for (rrp = dp; rrp->d_next; rrp = rrp->d_next)
		;

	rrp->d_next = rp;

	return dp;
}


/*
 *	Add a command to the end of the supplied list of commands.
 *	Return the new head pointer for that list.
 */
struct cmd *
newcmd(str, cp)
char *			str;
struct cmd *		cp;
{
	register struct cmd *	rp;
	register struct cmd *	rrp;
	register char *		rcp;


	if (rcp = rindex(str, '\n'))
		*rcp = '\0';		/*  Loose newline  */

	while (isspace(*str))
		str++;

	if (*str == '\0')		/*  If nothing left, the exit  */
		return;

	if ((rp = (struct cmd *)malloc(sizeof (struct cmd)))
				== (struct cmd *)0)
		fatal("No memory for command");
	rp->c_next = (struct cmd *)0;
	if ((rcp = malloc(strlen(str)+1)) == (char *)0)
		fatal("No memory for command");
	strcpy(rcp, str);
	rp->c_cmd = rcp;

	if (cp == (struct cmd *)0)
		return rp;

	for (rrp = cp; rrp->c_next; rrp = rrp->c_next)
		;

	rrp->c_next = rp;

	return cp;
}


/*
 *	Add a new 'line' of stuff to a target.  This check to see
 *	if commands already exist for the target.
 */
void
newline(np, dp, cp)
struct name *		np;
struct depend *		dp;
struct cmd *		cp;
{
	bool			hascmds = FALSE;  /*  Target has commands  */
	register struct line *	rp;
	register struct line *	rrp;


	for
	(
		rp = np->n_line, rrp = (struct line *)0;
		rp;
		rrp = rp, rp = rp->l_next
	)
		if (rp->l_cmd)
			hascmds = TRUE;

	if (hascmds && cp)
		error("Commands defined twice for target %s", np->n_name);

	if ((rp = (struct line *)malloc(sizeof (struct line)))
				== (struct line *)0)
		fatal("No memory for line");
	rp->l_next = (struct line *)0;
	rp->l_dep = dp;
	rp->l_cmd = cp;

	if (rrp)
		rrp->l_next = rp;
	else
		np->n_line = rp;

	np->n_flag |= N_TARG;
}


/*
 *	Parse input from the makefile, and construct a tree structure
 *	of it.
 */
void
input(fd)
FILE *			fd;
{
	char *			p;		/*  General  */
	char *			q;
	struct name *		np;
	struct depend *		dp;
	struct cmd *		cp;


	if (getline(str1, fd))	/*  Read the first line  */
		return;

	for(;;)
	{
		if (*str1 == '\t')	/*  Rules without targets  */
			error("Rules not allowed here");

		p = str1;

		while (isspace(*p))	/*  Find first target  */
			p++;

		while (((q = index(p, '=')) != (char *)0) &&
		    (p != q) && (q[-1] == '\\'))	/*  Find value */
		{
			register char *		a;

			a = q - 1;	/*  Del \ chr; move rest back  */
			p = q;
			while(*a++ = *q++)
				;
		}

		if (q != (char *)0)
		{
			register char *		a;

			*q++ = '\0';		/*  Separate name and val  */
			while (isspace(*q))
				q++;
			if (p = rindex(q, '\n'))
				*p = '\0';

			p = str1;
			if ((a = gettok(&p)) == (char *)0)
				error("No macro name");

			setmacro(a, q);

			if (getline(str1, fd))
				return;
			continue;
		}

		expand(str1);
		p = str1;

		while (((q = index(p, ':')) != (char *)0) &&
		    (p != q) && (q[-1] == '\\'))	/*  Find dependents  */
		{
			register char *		a;

			a = q - 1;	/*  Del \ chr; move rest back  */
			p = q;
			while(*a++ = *q++)
				;
		}

		if (q == (char *)0)
			error("No targets provided");

		*q++ = '\0';	/*  Separate targets and dependents  */

		for (dp = (struct depend *)0; ((p = gettok(&q)) != (char *)0);)
					/*  get list of dep's */
		{
			np = newname(p);		/*  Intern name  */
			dp = newdep(np, dp);		/*  Add to dep list */
		}

		*((q = str1) + strlen(str1) + 1) = '\0';
			/*  Need two nulls for gettok (Remember separation)  */

		cp = (struct cmd *)0;
		if (getline(str2, fd) == FALSE)		/*  Get commands  */
		{
			while (*str2 == '\t')
			{
				cp = newcmd(&str2[0], cp);
				if (getline(str2, fd))
					break;
			}
		}

		while ((p = gettok(&q)) != (char *)0)	/* Get list of targ's */
		{
			np = newname(p);		/*  Intern name  */
			newline(np, dp, cp);
			if (!firstname)
				firstname = np;
		}

		if (feof(fd) != 0  || endoffile == TRUE)	/*  EOF?  */
			return;

		strcpy(str1, str2);
	}
}


/*
 * Case insensitive strcmp() then used for = or != purposes.
 *
 * This makes cp/m makefile usage a bit simpler
 *
 *						-mdk
 */

no_case_cmp(first,second)
char *first;
char *second;
{
	register char *p1,*p2;

	for (p1=first,p2=second ; *p1 != '\0' ; p1++, p2++) {
		if ((islower(*p1) ? tolower(*p1) : *p1) != 
				(islower(*p2) ? tolower(*p2) : *p2) ) {
			break;
		}
	}

	if (*p1 == '\0' && *p2 == '\0') {
		return(0);
	}
	return(1);
}
SHAR_EOF
if test 5650 -ne "`wc -c input.c`"
then
echo shar: error transmitting input.c '(should have been 5650 characters)'
fi
echo shar: extracting macro.c
cat << \SHAR_EOF > macro.c
/*
 *	Macro control for make
 */


#include "h.h"


struct macro *		macrohead;


struct macro *
getmp(name)
char *			name;
{
	register struct macro *	rp;

	for (rp = macrohead; rp; rp = rp->m_next)
		if (strcmp(name, rp->m_name) == 0)
			return rp;
	return (struct macro *)0;
}


char *
getmacro(name)
char *			name;
{
	struct macro *		mp;

	if (mp = getmp(name))
		return mp->m_val;
	else
		return "";
}


struct macro *
setmacro(name, val)
char *			name;
char *			val;
{
	register struct macro *	rp;
	register char *		cp;


			/*  Replace macro definition if it exists  */
	for (rp = macrohead; rp; rp = rp->m_next)
		if (strcmp(name, rp->m_name) == 0)
		{
			free(rp->m_val);	/*  Free space from old  */
			break;
		}

	if (!rp)		/*  If not defined, allocate space for new  */
	{
		if ((rp = (struct macro *)malloc(sizeof (struct macro)))
					 == (struct macro *)0)
			fatal("No memory for macro");

		rp->m_next = macrohead;
		macrohead = rp;
		rp->m_flag = FALSE;

		if ((cp = malloc(strlen(name)+1)) == (char *)0)
			fatal("No memory for macro");
		strcpy(cp, name);
		rp->m_name = cp;
	}

	if ((cp = malloc(strlen(val)+1)) == (char *)0)
		fatal("No memory for macro");
	strcpy(cp, val);		/*  Copy in new value  */
	rp->m_val = cp;

	return rp;
}


/*
 *	Do the dirty work for expand
 */
void
doexp(to, from, len, buf)
char **			to;
char *			from;
int *			len;
char *			buf;
{
	register char *		rp;
	register char *		p;
	register char *		q;
	register struct macro *	mp;


	rp = from;
	p = *to;
	while (*rp)
	{
		if (*rp != '$')
		{
			*p++ = *rp++;
			(*len)--;
		}
		else
		{
			q = buf;
			if (*++rp == '(')
				while (*++rp && *rp != ')')
					*q++ = *rp;
			else if (!*rp)
			{
				*p++ = '$';
				break;
			}
			else
				*q++ = *rp;
			*q = '\0';
			if (*rp)
				rp++;
			if (!(mp = getmp(buf)))
				mp = setmacro(buf, "");
			if (mp->m_flag)
				fatal("Infinitely recursive macro %s", mp->m_name);
			mp->m_flag = TRUE;
			*to = p;
			doexp(to, mp->m_val, len, buf);
			p = *to;
			mp->m_flag = FALSE;
		}
		if (*len <= 0)
			error("Expanded line too line");
	}
	*p = '\0';
	*to = p;
}


/*
 *	Expand any macros in str.
 */
void
expand(str)
char *		str;
{
	static char		a[LZ];
	static char		b[LZ];
	char *			p;
	int			len = LZ-1;

	p = str;

	strcpy(a, str);
	doexp(&p, a, &len, b);
}
SHAR_EOF
if test 2298 -ne "`wc -c macro.c`"
then
echo shar: error transmitting macro.c '(should have been 2298 characters)'
fi
echo shar: extracting main.c
cat << \SHAR_EOF > main.c
/*
 *      make [-f makefile] [-nprst] [macro=val ...] [target(s) ...]
 *
 *	(Better than EON mk & old CPM make but not quite as good as UNIX make)
 *
 *	-f makefile name
 *	-i don't ignore exit status 		
 *	-n Pretend to make
 *	-p Print all macros & targets
 *	-q Question up-to-dateness of target.  Return exit status 1 if not
 *	-r Don't not use inbuilt rules
 *	-s Make silently
 *	-t Touch files instead of making them
 *	-m Change memory requirements	- N/A under CP/M
 */

#include "c:stdio.h"			/* c: is my ramdisk  */
#include "c:fcntl.h"
#include "h.h"

char Usage1[]="	-f makefile name\n\
	-i don't ignore exit status\n\
	-n Pretend to make\n\
	-p Print all macros & targets\n\
	-r Do not use inbuilt rules\n\
	-s Make silently\n\
	-t Touch files instead of making them\n";


#define MEMSPACE	(16384)		/* superfluous under cp/m */


char *			myname;
char *			makefile;	/*  The make file  */
unsigned		memspace = MEMSPACE;

extern FILE *execfile;

FILE *			ifd;		/*  Input file desciptor  */
bool			domake = TRUE;	/*  Go through the motions option  */
bool			ignore = TRUE;	/*  Ignore exit status option  */
bool			silent = FALSE;	/*  Silent option  */
bool			print = FALSE;	/*  Print debuging information  */
bool			rules = TRUE;	/*  Use inbuilt rules  */
bool			dotouch = FALSE;/*  Touch files instead of making  */
bool			quest = FALSE;	/*  Question up-to-dateness of file  */


void
main(argc, argv)
char **			argv;
int			argc;
{
	register char *		p;	/*  For argument processing  */
	int			estat;	/*  For question  */
	register struct name *	np;


	/*
	 * CP/M makes all command line junque upper case.  All things
	 * being equal, I'd rather they be all forced lower.  So I will.
	 *
	 * I have also forced everything in the makefile to lower case,
	 * so everything should be case insensitive.
	 */
	for (estat = argc ; --estat > 0 ;) {
			strlower(argv[estat]);
	}

	unlink(MAKERUN);	/* delete possible existing make-submit file */

	myname = (argc-- < 1) ? "make" : *argv++;
	/*
	 * CP/M can't do argv[0] (OS limitation), so we don't know who we are.
	 */
	myname = "make";

	while ((argc > 0) && (**argv == '-'))
	{
		argc--;		/*  One less to process  */
		p = *argv++;	/*  Now processing this one  */

		while (*++p != '\0')
		{
			/*
			 * Elaborate switch not really needed, but I
			 * hacked this in before I made all argv parameters
			 * lower case (for cp/m).
			 */
			switch( isupper(*p) ? tolower (*p) : *p )
			{
			case 'f':	/*  Alternate file name  */
				if (*++p == '\0')
				{
					if (argc-- <= 0)
						usage();
					p = *argv++;
				}
				makefile = p;
				goto end_of_args;
			case 'm':	/*  Change space requirements  */
				if (*++p == '\0')
				{
					if (argc-- <= 0)
						usage();
					p = *argv++;
				}
				memspace = atoi(p);
				goto end_of_args;
			case 'n':	/*  Pretend mode  */
				domake = FALSE;
				break;
			case 'i':	/*  Ignore fault mode  */
				ignore = FALSE;
				break;
			case 's':	/*  Silent about commands  */
				silent = TRUE;
				break;
			case 'p':
				print = TRUE;
				break;
			case 'r':
				rules = FALSE;
				break;
			case 't':
				dotouch = TRUE;
				break;
			case 'q':
				quest = TRUE;
				break;
			default:	/*  Wrong option  */
				usage();
			}
		}
	end_of_args:;
	}

/*	if (initalloc(memspace) == 0xffff)    Must get memory for alloc  
		fatal("Cannot initalloc memory");
*/
	if (strcmp(makefile, "-") == 0)	/*  Can use stdin as makefile  */
		ifd = stdin;
	else
		if (!makefile)		/*  If no file, then use default */
		{
		     if ((ifd = fopen(DEFN1, "r")) == (FILE *)0 
			  && ((ifd = fopen(DEFN2, "r")) == (FILE *)0)) {
				fatal("Can't open %s or %s; error %02x",
							 DEFN1,DEFN2, errno);
		     }
	        
		}
		else
			if ((ifd = fopen(makefile, "r")) == (FILE *)0)
				fatal("Can't open %s", makefile);

	if (rules)
		makerules();

	setmacro("$", "$");

	while (argc && (p = index(*argv, '=')))
	{
		char		c;

		c = *p;
		*p = '\0';
		setmacro(*argv, p+1);
		*p = c;

		argv++;
		argc--;
	}

	input(ifd);	/*  Input all the gunga  */
	fclose(ifd);	/*  Finished with makefile  */
	lineno = 0;	/*  Any calls to error now print no line number */

	if (print)
		prt();	/*  Print out structures  */

	np = newname(".SILENT");
	if (np->n_flag & N_TARG)
		silent = TRUE;

	np = newname(".IGNORE");
	if (np->n_flag & N_TARG)
		ignore = TRUE;

	precious();

	if (!domake)
		silent = FALSE;

	if (!firstname)
		fatal("No targets defined");

	circh();	/*  Check circles in target definitions  */

	if (!argc)
		estat = make(firstname, 0);
	else while (argc--)
	{
		if (!print && !silent && strcmp(*argv, "love") == 0)
			printf("Not war!\n");
		estat |= make(newname(*argv++), 0);
	}


	if (execfile == NULL) {
		exit(0);	/* no file made, must be up to date! */
	}

	/*
	 * The "trick" algorithm used for CP/M (which can't execute
	 * commands while "make" is running) is that dosh() really
	 * puts commands into a submit file MAKERUN, then after
	 * the make is "done", that submit file is chained-to (below).
	 * The first code-line below enters the submit file's last command
	 * to delete itself (so this chaining trick is mostly transparent.
	 *
	 *						-mdk
	 */

	dosh("era ",MAKERUN);   /* have the submit file delete itself */
	dosh("\n","");
	fclose(execfile);	/* close the writing to this file     */

	bdos(108,0);		/* Reset CP/M Program return code     */

	strcpy((char *)0x80,MAKERUN);	/* load submit file name into DMA buf*/
	bdos(47,0xff);		/* chain to the generated submit file */


/*	if (quest)
		exit(estat);
	else
		exit(0);
*/

}


usage()
{
	fprintf(stderr, "Usage: %s [-f makefile] [-nprst] [macro=val ...] [target(s) ...]\n%s", myname,Usage1);
	exit(1);
}


void
fatal(msg, a1, a2, a3)
char	*msg;
{
	fprintf(stderr, "%s: ", myname);
	fprintf(stderr, msg, a1, a2, a3);
	fputc('\n', stderr);
	exit(1);
}


	
strlower(string)
char *string;
{
	register char *pointer;
	char c;
	for (pointer = string ; (c=*pointer) != '\0' ; pointer++ ) {
		if (isupper(c))
			*pointer = tolower(c);
	}
}
SHAR_EOF
if test 5995 -ne "`wc -c main.c`"
then
echo shar: error transmitting main.c '(should have been 5995 characters)'
fi
echo shar: extracting reader.c
cat << \SHAR_EOF > reader.c
/*
 *	Read in makefile
 */


#include "c:stdio.h"
#include "h.h"


int			lineno;

int endoffile = FALSE;

/*
 *	Syntax error handler.  Print message, with line number, and exits.
 */
void
error(msg, a1, a2, a3)
char *			msg;
{
	fprintf(stderr, "%s: ", myname);
	fprintf(stderr, msg, a1, a2, a3);
	if (lineno)
		fprintf(stderr, " on line %d", lineno);
	fputc('\n', stderr);
	exit(1);
}


/*
 *	Read a line into the supplied string of length LZ.  Remove
 *	comments, ignore blank lines. Deal with	quoted (\) #, and
 *	quoted newlines.  If EOF return TRUE.
 */
bool
getline(str, fd)
char *		str;
FILE *		fd;
{
	register char *		p;
	char *			q;
	int			pos = 0;
	int			concatflag = 0;
	int			size;


	for (;;)
	{
		if (fgets(str+pos, LZ-pos, fd) == (char *)0) {
			endoffile = TRUE;
			return (TRUE);		/*  EOF  */
			
		}
		if (index(str+pos,'\032') != (char *)0) {
			endoffile = TRUE;
			return(TRUE);
		}

		/*
		 * Strip CP/M CR characters
		 */
		if ((p=index(str+pos,'\015')) != (char *)0) {
			do {
				*p = p[1];
			} while (*(++p) != '\0');
		}

		/*
		 * Shorten leading whitespace on line extensions.
		 */
		if (concatflag != 0) {
			for (p = str+pos ; iswhite(*p) ; p++ ) ;
			size = p-str-pos-1;
			if (size > 0) {
				p = str+pos+1;
				while ((*p = p[size]) != '\0') {
					p++;
				}
			}
		}

		strlower(str+pos); /* let's do everything inlower case */

		lineno++;

		if ((p = index(str+pos, '\n')) == (char *)0)
			error("Line too long");

		/* 
		 * I want to actually join lines that are logically joined
		 * so that when link commands are generated for CP/M,
		 * a usable CCP command line will be generated.
		 */
		if (p[-1] == '\\') {
			*(--p) = '\0';
			pos = p - str;
			concatflag = 1;
			continue;
		}

		p = str;
		while (((q = index(p, '#')) != (char *)0) &&
		    (p != q) && (q[-1] == '\\'))
		{
			char	*a;

			a = q - 1;	/*  Del \ chr; move rest back  */
			p = q;
			while (*a++ = *q++)
				;
		}
		if (q != (char *)0)
		{
			q[0] = '\n';
			q[1] = '\0';
		}

		p = str;
		while (isspace(*p))	/*  Checking for blank  */
			p++;

		if (*p != '\0')
			return FALSE;
		pos = 0;
	}
}


/*
 *	Get a word from the current line, surounded by white space.
 *	return a pointer to it. String returned has no white spaces
 *	in it.
 */
char *
gettok(ptr)
char	**ptr;
{
	register char *		p;


	while (isspace(**ptr))	/*  Skip spaces  */
		(*ptr)++;

	if (**ptr == '\0')	/*  Nothing after spaces  */
		return NULL;

	p = *ptr;		/*  word starts here  */

	while ((**ptr != '\0') && (!isspace(**ptr)))
		(*ptr)++;	/*  Find end of word  */

	*(*ptr)++ = '\0';	/*  Terminate it  */

	return(p);
}
SHAR_EOF
if test 2614 -ne "`wc -c reader.c`"
then
echo shar: error transmitting reader.c '(should have been 2614 characters)'
fi
echo shar: extracting rules.c
cat << \SHAR_EOF > rules.c
/*
 *	Control of the implicit suffix rules
 */


#include "h.h"

extern long ftime();
extern long time();
extern char *rindex();
extern struct name *newname();
extern char *setmacro();

/*
 *	Return a pointer to the suffix of a name
 */
char *
suffix(name)
char *			name;
{
	return(rindex(name, '.'));
}


/*
 *	Dynamic dependency.  This routine applies the suffix rules
 *	to try and find a source and a set of rules for a missing
 *	target.  If found, np is made into a target with the implicit
 *	source name, and rules.  Returns TRUE if np was made into
 *	a target.
 */
bool
dyndep(np)
struct name *		np;
{
	register char *		p;
	register char *		q;
	register char *		suff;		/*  Old suffix  */
	register char *		basename;	/*  Name without suffix  */
	struct name *		op;		/*  New dependent  */
	struct name *		sp;		/*  Suffix  */
	struct line *		lp;
	struct depend *		dp;
	char *			newsuff;


	p = str1;
	q = np->n_name;
	suff = suffix(q);
	while (q < suff)
		*p++ = *q++;
	*p = '\0';
	basename = setmacro("*", str1)->m_val;

	if (!((sp = newname(".suffixes"))->n_flag & N_TARG))
		return FALSE;

	for (lp = sp->n_line; lp; lp = lp->l_next)
		for (dp = lp->l_dep; dp; dp = dp->d_next)
		{
			newsuff = dp->d_name->n_name;
			if (strlen(suff)+strlen(newsuff)+1 >= LZ)
				fatal("Suffix rule too long");
			p = str1;
			q = newsuff;
			while (*p++ = *q++)
				;
			p--;
			q = suff;
			while (*p++ = *q++)
				;
			sp = newname(str1);
			if (sp->n_flag & N_TARG)
			{
				p = str1;
				q = basename;
				if (strlen(basename) + strlen(newsuff)+1 >= LZ)
					fatal("Implicit name too long");
				while (*p++ = *q++)
					;
				p--;
				q = newsuff;
				while (*p++ = *q++)
					;
				op = newname(str1);
				if (!op->n_time)
		op->n_time = ftime(op->n_name);/*  Gets modtime of this file*/
				if (op->n_time)
				{
					dp = newdep(op, 0);
					newline(np, dp, sp->n_line->l_cmd);
					setmacro("<", op->n_name);
					return TRUE;
				}
			}
		}
	return FALSE;
}


/*
 *	Make the default rules
 */
void
makerules()
{
	struct cmd *		cp;
	struct name *		np;
	struct depend *		dp;


#ifdef xyz123zzz

	/*
	 * Sure would have been nice if this had been documented as
	 * to exactly what was going on with the routine calls.
	 *
	 *					-mdk
	 */
	setmacro("BDSCC", "asm");
	/*	setmacro("BDSCFLAGS", "");	*/
	cp = newcmd("$(BDSCC) $(BDSCFLAGS) -n $<", 0);
	np = newname(".c.o");
	newline(np, 0, cp);

	setmacro("CC", "c");
	setmacro("CFLAGS", "-O");
	cp = newcmd("$(CC) $(CFLAGS) -c $<", 0);
	np = newname(".c.obj");
	newline(np, 0, cp);

	setmacro("M80", "asm -n");
	/*	setmacro("M80FLAGS", "");	*/
	cp = newcmd("$(M80) $(M80FLAGS) $<", 0);
	np = newname(".mac.o");
	newline(np, 0, cp);

	setmacro("AS", "zas");
	/*	setmacro("ASFLAGS", "");	*/
	cp = newcmd("$(AS) $(ASFLAGS) -o $@ $<", 0);
	np = newname(".as.obj");
	newline(np, 0, cp);

	np = newname(".as");
	dp = newdep(np, 0);
	np = newname(".obj");
	dp = newdep(np, dp);
	np = newname(".c");
	dp = newdep(np, dp);
	np = newname(".o");
	dp = newdep(np, dp);
	np = newname(".mac");
	dp = newdep(np, dp);
	np = newname(".suffixes");
	newline(np, dp, 0);
#endif
	

	/*
	 * C compilation.  I use cc-c.sub to do what unix cc -c does.
	 *
	 * 	Macros can be overridden in makfile if I change and am
	 *	too lazy to recompile this make program's rules.
   	 *
	 */
	setmacro("ccc", "cc-c");
	setmacro("cflags", "");
	setmacro("cwhich", "$*");
	cp = newcmd("$(ccc) $(cflags) $(cwhich)", 0);
	np = newname(".c.o");
	newline(np, 0, cp);

	/*
	 * Assembly using RMAC.
	 */
	setmacro("asm", "rmac");
	setmacro("asmflags", "$$PZ SZ");
	setmacro("asmwhich", "$*");
	cp = newcmd("$(asm) $(asmwhich) $(asmflags)", 0);
	np = newname(".asm.rel");
	newline(np, 0, cp);
		
	/*
	 * No point in my Z80 assembler or MAC.  Rules for
	 * non-linkable one-module language-tools makes no
	 * sense because it is a one-file process anyway.
	 */


	np = newname(".asm");
	dp = newdep(np, 0);
	np = newname(".rel");
	dp = newdep(np,dp);
	np = newname(".c");
	dp = newdep(np, dp);
	np = newname(".o");
	dp = newdep(np,dp);
	np = newname(".suffixes");
	newline(np, dp, 0);

}
SHAR_EOF
if test 4094 -ne "`wc -c rules.c`"
then
echo shar: error transmitting rules.c '(should have been 4094 characters)'
fi
echo shar: extracting h.h
cat << \SHAR_EOF > h.h
/*
 *	Include header for make
 */


#ifndef uchar
#define uchar		char	/* regular char's are unsigned w/Aztec C */
#endif

#define void 		int

#define bool		uchar
#define time_t		long
#define TRUE		(1)
#define FALSE		(0)
#ifndef max
#define max(a,b)	((a)>(b)?(a):(b))
#endif

#define DEFN1		"MAKEFILE.DAT"		/*  Default names  */
#define DEFN2		"MAKEFILE"
#define errout(s) fputs(s, stderr) /* No need for DeSmet kludge */
#define MAKERUN "MAKE@@@.SUB" /* File on which commands are written */

#define LZ		(1024)			/*  Line size  */



/*
 *	A name.  This represents a file, either to be made, or existant
 */

struct name
{
	struct name *		n_next;		/* Next in the list of names */
	char *			n_name;		/* Called */
	struct line *		n_line;		/* Dependencies */
	time_t			n_time;		/* Modify time of this name */
	uchar			n_flag;		/* Info about the name */
};

#define N_MARK		0x01			/* For cycle check */
#define N_DONE		0x02			/* Name looked at */
#define N_TARG		0x04			/* Name is a target */
#define N_PREC		0x08			/* Target is precious */

/*
 *	Definition of a target line.
 */
struct	line
{
	struct line *		l_next;		/* Next line (for ::) */
	struct depend *		l_dep;		/* Dependents for this line */
	struct cmd *		l_cmd;		/* Commands for this line */
};


/*
 *	List of dependents for a line
 */
struct	depend
{
	struct depend *		d_next;		/* Next dependent */
	struct name *		d_name;		/* Name of dependent */
};


/*
 *	Commands for a line
 */
struct	cmd
{
	struct cmd *		c_next;		/* Next command line */
	char *			c_cmd;		/* Command line */
};


/*
 *	Macro storage
 */
struct	macro
{
	struct macro *		m_next;		/* Next variable */
	char *			m_name;		/* Called ... */
	char *			m_val;		/* Its value */
	uchar			m_flag;		/* Infinite loop check */
};

extern char *		myname;
extern struct name	namehead;
extern struct macro *	macrohead;
extern struct name *	firstname;
extern bool		silent;
extern bool		ignore;
extern bool		rules;
extern bool		dotouch;
extern bool		quest;
extern bool		domake;
extern char		str1[];
extern char		str2[];
extern int		lineno;

char *			fgets();
char *			index();
char *			rindex();
char *			malloc();
extern int		errno;

char *			getmacro();
struct macro *		setmacro();
void			input();
void			error();
void			fatal();
int			make();
struct name *		newname();
struct depend *		newdep();
struct cmd *		newcmd();
void			newline();
char *			suffix();
void			touch();
void			makerules();
char *			gettok();
void			precious();
SHAR_EOF
if test 2448 -ne "`wc -c h.h`"
then
echo shar: error transmitting h.h '(should have been 2448 characters)'
fi
#	End of shell archive
exit 0

-- 

Mike Kersenbrock
Tektronix Computer Aided Software Engineering
Aloha, Oregon
31-Jul-86 19:39:30-MDT,46966;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 19:37:52-MDT
Received: from brl-smoke.arpa by AMSAA.ARPA id a000907; 31 Jul 86 19:47 EDT
Received: from USENET by SMOKE.BRL.ARPA id a005284; 31 Jul 86 19:41 EDT
From: Michael Kersenbrock <michaelk%copper.uucp@BRL.ARPA>
Newsgroups: net.micro.cpm
Subject: MAKE for CPM 3.0 part 2 of 2
Message-ID: <514@copper.UUCP>
Date: 31 Jul 86 07:30:05 GMT
Keywords: cpm, make
To:       info-cpm@AMSAA.ARPA

<------------->

This is the uuencoded binary for "make.com".  The sources and man page
were separately posted as part 1.

Mike Kersenbrock
Aloha, Oregon
...!tektronix!copper!michaelk


#	This is a shell archive.
#	Remove everything above and including the cut line.
#	Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar:    Shell Archiver
#	Run the following text with /bin/sh to create:
#	MAKE.UUE
# This archive created: Wed Jul 30 23:46:19 1986
# By:	Michael D. Kersenbrock (Oregon HomePower Software)
echo shar: extracting make.uue
cat << \SHAR_EOF > make.uue
begin 644 MAKE.COM
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
M=6579614:'5&<FE3870`2F%N1F5B36%R07!R36%Y2G5N2G5L075G4V5P3V-T
M3F]V1&5C`,UD*```(0P`.5XC5B$$`,WW*,)!9R%N`<DA;0')S60H```A#``Y
M3B-&8&DC1$TK(0X`.5XC5B$*`,W"*,J+9R$.`#E>(U8A"@#-B2@1"@#KS?<H
M$3``&>5@:2-$32O1<\.79R$@`.5@:2-$32O1<R$.`#E>(U8A"@#-]R@1,``9
MY6!I(T1-*]%S8&G)S60H```A#@`Y7B-60DLA)`#EW>'#UV<A``#E8&DC1$TK
MT7/=Y>$KY=WA(Q$``.O-WBC*[&?#RV<A#@`Y7B-6U2$.`#E>(U;5S<,YT=$A
M#@`Y7B-6U2$/`.7-BCG1T<HM:"$.`#E>(U;5(18`Y<V*.='1RBUH(?__R2$`
M`,G-9"@``"$,`#E>(U;5(1``Y<V*.='1R<UD*```(0P`.5XC5M4A$P#ES8HY
MT=')S60H_O\A$@`Y7B-6(2$`&>LA!``Y<R-R(0X`.5XC5M4A&@#ES8HYT=$A
M$``Y7B-6U2$&`#E>(U;KT7,C<B$2`#E>(U;5(2(`Y<V*.='1R<UD*/[_(1(`
M.5XC5B$A`!GK(00`.7,C<B$.`#E>(U;5(1H`Y<V*.='1(1``.5XC5M4A!@`Y
M7B-6Z]%S(W(A$@`Y7B-6U2$A`.7-BCG1T<D`````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```````````````````````P,3(S-#4V-S@Y86)C9&5F````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````````````````/-_`/P`````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````!4!&3>1.P4\`````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````5`A%!K4FM2````````````````````````````
M````````````````````````````````````````````'P`<`!\`'@`?`!X`
M'P`?`!X`'P`>`!\`M@<%`$T!MP<Z`"\!``!W`"\!L@>0`0``LP<O`0``M`<O
M`3H````O`4$`OP=6`"\!P`=6`"\!P0=6`"\!``"0`0``OP=6`!`!P`=6`!`!
MP0=6`!`!``"0`0```0`!`#UU`0`"``$`3W4```,``0!G=0$`!``!`']U`0`%
M``$`?W4!`/__`````````````````````````````````````````0````0`
M```````!`0`!``````````$"``$`````````````````````````````````
M````````````````````````````````````````````````````````````
M``````````````````````````````#Q=/5T``!<.F4Z``````````$)+68@
M;6%K969I;&4@;F%M90H)+6D@9&]N)W0@:6=N;W)E(&5X:70@<W1A='5S"@DM
M;B!0<F5T96YD('1O(&UA:V4*"2UP(%!R:6YT(&%L;"!M86-R;W,@)B!T87)G
M971S"@DM<B!$;R!N;W0@=7-E(&EN8G5I;'0@<G5L97,*"2US($UA:V4@<VEL
M96YT;'D*"2UT(%1O=6-H(&9I;&5S(&EN<W1E860@;V8@;6%K:6YG('1H96T*
M```"``#/3`,```#/3`(``0`40`(```(!`!1``@```@$`%$`"```````%0```
M``````5`````````!4`````````%0`````````5`````````!4`````````%
M0`````````5````+2<=W`@`02<=W`@`522%W!0`:22%W!0`?22%W!0`D22%W
M!0`I22%W!``N22%W!``S22=W`P`X22=W`P```--W```"`@$`STP````````!
M`0`!3TL!````````````0`````````````````$`````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
7`````````````!H:&AH:&AH:&AH:&@`:
`
end
SHAR_EOF
if test 44823 -ne "`wc -c make.uue`"
then
echo shar: error transmitting make.uue '(should have been 44823 characters)'
fi
#	End of shell archive
exit 0
-- 

Mike Kersenbrock
Tektronix Computer Aided Software Engineering
Aloha, Oregon
31-Jul-86 22:08:39-MDT,1090;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 22:08:25-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a001925; 31 Jul 86 23:37 EDT
Date: Thu 31 Jul 86 21:37:16-MDT
From: Rick Conn <RCONN@SIMTEL20.ARPA>
Subject: Z-System Newsletters
To: info-cpm@AMSAA.ARPA
Message-ID: <12227222144.18.RCONN@SIMTEL20.ARPA>

	In PD:<ZSYS.NEW> are the following Z-System Newsletters from Echelon.
The squeezed forms are also stored in PD:<ZSYS.Z-NEWS>, along with all
the other newsletters.  I have been advised that Frank Gaude' at Echelon
has almost completed a complete index of these newsletters, and this index
will be mailed to the subscribers.  It is over 30 pages long and
quite comprehensive.


   PD:<ZSYS.NEW>
		  Bytes(SZ)  

 Z-NEWS.503.1     21792(7)   
   .504.1         19552(7)   
   .505.1         22241(7)   
   .506.1         21419(7)   
   .5Q3.1         13312(8)   
   .5Q4.1         12544(8)   
   .5Q5.1         13824(8)   
   .5Q6.1         13440(8)   

 Total of 63 pages in 8 files
-------
31-Jul-86 22:43:23-MDT,880;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 22:43:09-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a001992; 1 Aug 86 0:05 EDT
Date: Thu 31 Jul 86 22:03:56-MDT
From: Rick Conn <RCONN@SIMTEL20.ARPA>
Subject: New Z-System Files
To: info-cpm@AMSAA.ARPA
Message-ID: <12227226998.18.RCONN@SIMTEL20.ARPA>

	In PD:<ZSYS.INSTALL> and <ZSYS.NEW>:
Z3-WKBK.WQ - Installation Workbook for Z3

	In PD:<ZSYS.ZSIG> and <ZSYS.NEW>:
VCED16.LBR - command-line editor
MOVE20.LBR - move files on same disk by changing user number
Z-RIP.LBR  - quick installation routine
ZSIGPOL1.DOC - submitting to ZSIG
Z3TRBO12.LBR -
ZLUX24.LBR -

	In PD:<ZSYS.ZCPR3> and <ZSYS.NEW>:
VFILER41G.LBR - new VFILER
VMENU17.LBR -
LDR15.LBR -
ALIAS#1.LBR -
ZSYSTEM.INS - listing of Z-System programs from Echelon and ZSIG
-------
31-Jul-86 22:50:13-MDT,755;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 22:50:06-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a002035; 1 Aug 86 0:15 EDT
Date: Thu 31 Jul 86 22:15:54-MDT
From: Rick Conn <RCONN@SIMTEL20.ARPA>
Subject: More Z-System Files
To: info-cpm@AMSAA.ARPA
Message-ID: <12227229178.18.RCONN@SIMTEL20.ARPA>

	In PD:<ZSYS.DOC> and <ZSYS.NEW>:
ZNODE.REQ - Requirements for becoming a Z-Node
ZNODES28.LST - Listing of Z-Nodes

	In PD:<ZSYS.ZCPR3> and <ZSYS.NEW>:
T3T-24-1.Z80 - Telephone Interface overlay for DC Hayes 2400
	for Term III

	In PD:<ZSYS.INSTALL> and <ZSYS.NEW>:
Z3KAYDSK.MSG

	In PD:<ZSYS.ZSIG> and <ZSYS.NEW>:
Z3KEY14.LBR -
MKLINE.LBR -
WILDEX.MQC -

-------
31-Jul-86 23:07:26-MDT,712;000000000000
Return-Path: <info-cpm-request@AMSAA.ARPA>
Received: from AMSAA by SIMTEL20.ARPA with TCP; Thu 31 Jul 86 23:07:18-MDT
Received: from simtel20.arpa by AMSAA.ARPA id a002043; 1 Aug 86 0:17 EDT
Date: Thu 31 Jul 86 22:17:40-MDT
From: Rick Conn <RCONN@SIMTEL20.ARPA>
Subject: Previous Announcements
To: info-cpm@AMSAA.ARPA
Message-ID: <12227229499.18.RCONN@SIMTEL20.ARPA>

	The files in PD:<ZSYS.NEW> are temporary ... subject to deletion
after a few weeks.  NEW is provided as a convenience to Z-System users
who are keeping up with new software releases.

	Thanks to Keith Petersen for his efforts in uploading the files
I just announced.  Keith's work really is appreciated.

		Rick Conn
-------
